Pandas库的使用

pandas 是基于NumPy 的一种工具,是为了解决数据分析任务而创建的,提供了很多进行数据分析处理的函数。

Series类型数据是一维数组型,除了数据之外还有一组索引。
DataFrame类型数据是表格型数据,即有行索引又有列索引,每列数据可以是不同的数据类型。

(1)Series的创建与基本操作

– 对于Series类型的数据结构的创建方法如下:

s1=pd.Series([1,2,3,4])    #创建一个Series数据类型,索引为默认值,即从0开始
print(s1)

执行结果为:
0    1
1    2
2    3
3    4
dtype: int64
说明:第一列中的0,1,2,3是Series的索引

print(s1.index)           #查看Series的索引

执行结果为:
RangeIndex(start=0, stop=4, step=1)

print(s1.values)          #查看Series的序列值

执行结果为:
[1 2 3 4]

s2=pd.Series([2,3,4,5.0,6.6],index=['a','b','c','d','e'])    #创建Series时指定索引值
print(s2)

执行结果为:
a    2.0
b    3.0
c    4.0
d    5.0
e    6.6
dtype: float64

dict1={'id':12,'name':'liu','age':18}    #Series可以看成是一个定长的有序字典,字典的Key相当于Series中的索引,字典Value相当于Series中的值
s3=pd.Series(dict1)
print(s3)

执行结果为:
id       12
name    liu
age      18
dtype: object

– 对于创建的Series,可以根据索引来查询对应的Series值,实现方法如下::

i1=s2['d']                         #根据索引取Series值
print("i1=",i1)

执行结果为:
i1= 5.0

i2=s2[['a','b']]                #根据多个索引取相应的Series值
print(i2)

执行结果为:
a    2.0
b    3.0

(2)DataFrame的创建与基本操作

– DataFrame类型的数据定义方法如下:

data={'name':['liu','zhang','li'],
      'sex':['男','女','男'],
      'age':[10,12,13]}
df1=pd.DataFrame(data,index=[1,2,3])             #可以通过字典创建DataFrame,若不指定行与列索引的取值,则默认取值从0开始
print(df1)

执行结果为:
    name sex  age
1    liu   男   10
2  zhang   女   12
3     li   男   13

df2=pd.DataFrame(np.arange(12).reshape(3,4),index=['a','c','b'],columns=[11,13,10,12])  #将二维数组转化为DataFrame类型数据,若不指定行与列索引的取值,默认取值从0开始
print(df2)

执行结果为:
   11  13  10  12
a   0   1   2   3
c   4   5   6   7
b   8   9  10  11

arr1=np.array([[1,2,3,4],[2,3,4,5]])             #若要指定DataFrame中的特定取值,可以通过二维数据创建
df3=pd.DataFrame(arr1,index=np.arange(2),columns=np.arange(4))
print(df3)

执行结果为:
   0  1  2  3
0  1  2  3  4
1  2  3  4  5

print(df3.columns)        #获取DataFrame数据的列索引

执行结果为:
Int64Index([11, 13, 10, 12], dtype='int64')

print(df3.index)          #获取DataFrame数据的行索引

执行结果为:
Index(['a', 'c', 'b'], dtype='object')

print(df3.values)         #获取DataFrame中的数据值

执行结果为:
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]

print(df3.describe())     #获取DataFrame数据中的最大最小值以及四分位数

执行结果为:
        11   13    10    12
count  3.0  3.0   3.0   3.0
mean   4.0  5.0   6.0   7.0
std    4.0  4.0   4.0   4.0
min    0.0  1.0   2.0   3.0
25%    2.0  3.0   4.0   5.0
50%    4.0  5.0   6.0   7.0
75%    6.0  7.0   8.0   9.0
max    8.0  9.0  10.0  11.0

– 对DataFrame类型数据进行转置、排序,基本操作如下:

df4=df3.T                 #DataFrame类型数据进行转置
print(df4)

执行结果如下:
    a  c   b
11  0  4   8
13  1  5   9
10  2  6  10
12  3  7  11

print(df3.sort_index(axis=1))    #根据列索引值的大小对数据进行排序

执行结果如下:
   10  11  12  13
a   2   0   3   1
c   6   4   7   5
b  10   8  11   9

print(df3.sort_index(axis=0,ascending=False))    #根据行索引值的大小对数据进行排序,使用ascending=False实现降序排列

执行结果如下:
   11  13  10  12
c   4   5   6   7
b   8   9  10  11
a   0   1   2   3

print(df3.sort_values(by=10,ascending=False))    #对列索引值为10的一列数据进行降序排序

执行结果如下:
   11  13  10  12
b   8   9  10  11
c   4   5   6   7
a   0   1   2   3

– 对DataFrame类型数据进行查询选择,可以使用loc、iloc进行查询,其中loc是从索引中获取具有特定标签的行(或列);iloc是在索引中的特定位置获取行(或列)(因此它只接受整数)。基本操作过程如下:

dates=pd.date_range('20210101',periods=6)
df5=pd.DataFrame(np.arange(24).reshape(6,4),index=dates,columns=['A','B','C','D'])
print(df5)

执行结果如下:
             A   B   C   D
2021-01-01   0   1   2   3
2021-01-02   4   5   6   7
2021-01-03   8   9  10  11
2021-01-04  12  13  14  15
2021-01-05  16  17  18  19
2021-01-06  20  21  22  23

data1=df5['A']   #从DataFrame中获取一列数据为Series类型数据
print(data1)

执行结果如下:
2021-01-01     0
2021-01-02     4
2021-01-03     8
2021-01-04    12
2021-01-05    16
2021-01-06    20

data2=df5.B     #从DataFrame中获取一列数据为Series类型数据
print(data2)

执行结果如下:
2021-01-01     0
2021-01-02     4
2021-01-03     8
2021-01-04    12
2021-01-05    16
2021-01-06    20

data3=df5[0:2]                    #从DataFrame中获取前两行
print(data3)

执行结果如下:
            A  B  C  D
2021-01-01  0  1  2  3
2021-01-02  4  5  6  7

data4=df5['20210101':'20210102']  #根据行索引值获取前两行
print(data4)

执行结果如下:
            A  B  C  D
2021-01-01  0  1  2  3
2021-01-02  4  5  6  7

data5=df5.loc['20210101',['A','D']]   #选择行索引为'202101010',列索引为'A','D'的数据
print(data5)

执行结果如下:
A    0
D    3
Name: 2021-01-01 00:00:00, dtype: int32

data6=df5.loc[:,:]                   #选择所有行所有列的值
print(data6)

执行结果为:
             A   B   C   D
2021-01-01   0   1   2   3
2021-01-02   4   5   6   7
2021-01-03   8   9  10  11
2021-01-04  12  13  14  15
2021-01-05  16  17  18  19
2021-01-06  20  21  22  23

data7=df5.iloc[0:3,2:4]              #根据位置选择第1~3行,3~4列的数据
print(data7)

执行结果如下:
             C   D
2021-01-01   2   3
2021-01-02   6   7
2021-01-03  10  11

data8=df5.iloc[[1,2,4],[1,3]]       #根据位置提取不连续的行与列的数据
print(data8)

             B   D
2021-01-02   5   7
2021-01-03   9  11
2021-01-05  17  19

result=data8>7                    #对于DataFrame中的数据进行逻辑判断,是否大于7
print(result)

执行结果为:
                B      D
2021-01-02  False  False
2021-01-03   True   True
2021-01-05   True   True

– 对DataFrame类型数据进行赋值及一些操作,基本的操作过程如下:

dates=np.arange(20210101,20210107)
df6=pd.DataFrame(np.arange(24).reshape(6,4),index=dates,columns=['A','B','C','D'])
print(df6)

执行结果为:
         A  B   C   D
20210101  0  1   2   3
20210102  4  5   6   7
20210103  8  9  10  11

df6.iloc[2,3]=100                #对DataFrame中某一个数据进行赋值,即将第3行第4列的数据赋值为100
print(df6)

执行结果为:
         A  B   C    D
20210101  0  1   2    3
20210102  4  5   6    7
20210103  8  9  10  100

df6[df6.A>3]=0                   #将df6中满足A列数据大于3的所有行赋值为0
print(df6)

执行结果为:
         A  B  C  D
20210101  0  1  2  3
20210102  0  0  0  0
20210103  0  0  0  0

df6['E']=10                     #添加一列数据,该列的所有行取相同的值
print(df6)

执行结果为:
         A  B  C  D   E
20210101  0  1  2  3  10
20210102  0  0  0  0  10
20210103  0  0  0  0  10

df6['F']=pd.Series([1,2,3],index=dates)   #添加一列数据,该列的所有行取指定值
print(df6)

执行结果为:
         A  B  C  D   E  F
20210101  0  1  2  3  10  1
20210102  0  0  0  0  10  2
20210103  0  0  0  0  10  3

(1)空值的判断

– 对DataFrame类型数据中是否存在空值进行判断,执行过程如下:

import pandas as pd
import numpy as np
dates=np.arange(20210101,20210105)
df7=pd.DataFrame(np.arange(12).reshape(4,3),index=dates,columns=['A','B','C'])
df8=pd.DataFrame(df7,index=dates,columns=['A','B','C','D','E'])
df8['D']=pd.Series(np.arange(3),index=dates[1:])
df8['E']=pd.Series(np.arange(4,7),index=dates[:3])  #构造一个含有控制的DataFrame类型数据df8
print(df8)

执行结果为:
         A   B   C    D    E
20210101  0   1   2  NaN  4.0
20210102  3   4   5  0.0  5.0
20210103  6   7   8  1.0  6.0
20210104  9  10  11  2.0  NaN

result1=df8.isnull()   #判断df8中是否有缺失数据,若有,则返回值为True,否则,返回值为False
print(result1)

执行结果为:
             A      B      C      D      E
20210101  False  False  False   True  False
20210102  False  False  False  False  False
20210103  False  False  False  False  False
20210104  False  False  False  False   True

result2=np.any(df8.isnull()) #当df8中存在一个或多个空值的时候即返回True,若不存在空值则返回False
print(result2)

执行结果为:
True

result3=np.all(df8.isnull())   #当df8中的数据全部位空值时,返回为True,否则,返回为False
print(result3)

执行结果为:
False

(2)空值的处理

– 若数据中存在空值,则可以直接丢弃或者使用其他值进行填空,主要的操作如下:

result4=df8.dropna(axis=0,how="any") #将df8中存在缺失数据的行或列直接丢弃,
                                     其中axis=0,表示行,axis=1,表示列;how="any"表示存在任意一个
                                     或多个缺失值,how="all"表示全部为缺失值
print(result4)

执行结果为:
        A  B  C    D    E
20210102  3  4  5  0.0  5.0
20210103  6  7  8  1.0  6.0

result5=df8.dropna(axis=1,how="all")   #若df8中存在某列的数据全部位缺失值,则将该列丢弃
print(result5)

执行结果为:
        A   B   C    D    E
20210101  0   1   2  NaN  4.0
20210102  3   4   5  0.0  5.0
20210103  6   7   8  1.0  6.0
20210104  9  10  11  2.0  NaN

result7=df8.fillna(method='pad',axis=1) #使用缺失值的前一个值进行填补,axis=0表示使用前一行非缺失
                                        值进行填补;axis=1,表示使用前一列进行非缺失值填补
print(result7)

执行结果为:
          A     B     C    D    E
20210101  0.0   1.0   2.0  2.0  4.0
20210102  3.0   4.0   5.0  0.0  5.0
20210103  6.0   7.0   8.0  1.0  6.0
20210104  9.0  10.0  11.0  2.0  2.0

result8=df8.fillna(method='backfill',axis=0)  #使用缺失值的后一个值进行填补,axis=0表示使用后一行
                                               的非缺失值进行填补,axis=1,表示使用后一列的非缺失
                                               值进行填补
print(result8)

执行结果为:
        A   B   C    D    E
20210101  0   1   2  0.0  4.0
20210102  3   4   5  0.0  5.0
20210103  6   7   8  1.0  6.0
20210104  9  10  11  2.0  NaN
file=pd.read_excel('E:\学习\python\DataEvaluateCode\student.xlsx',sheet_name='Sheet2') #从excel中读取数据,读取到Python中为DataFrame类型,其中sheet_name用来指定想要打开的excel中的sheet的名字
print(file)

执行结果为:
 序号   学号  姓名  成绩
0   1  101  张三  95
1   2  102  李四  80
2   3  103  王五  78

file.to_csv('E:\学习\python\DataEvaluateCode\student2.csv',encoding='gbk')    #将DataFrame类型数据写入到excel文件中

数据的合并操作如下:

data1=pd.DataFrame(np.arange(12).reshape(4,3),columns=['a','c','d'])
data2=pd.DataFrame(np.arange(12,24).reshape(3,4),columns=['a','b','c','d'])
print(data1)

执行结果为:
 a   c   d
0  0   1   2
1  3   4   5
2  6   7   8
3  9  10  11

print(data2)

执行结果为:
  a   b   c   d
0  12  13  14  15
1  16  17  18  19
2  20  21  22  23

df9=pd.concat([data1,data2],axis=0,ignore_index=True) #将data1与data2进行纵向合并(axis=0表示纵向,axis=1表示横向),ignore_index=True表示行索引重新取值
print(df9)

执行结果为:
  a   c   d     b
0   0   1   2   NaN
1   3   4   5   NaN
2   6   7   8   NaN
3   9  10  11   NaN
4  12  14  15  13.0
5  16  18  19  17.0
6  20  22  23  21.0

df10=pd.concat([data1,data2],axis=1)      #将data1与data2进行横向合并,缺少的部分使用NaN填充
print(df10)

执行结果为:
 a   c   d     a     b     c     d
0  0   1   2  12.0  13.0  14.0  15.0
1  3   4   5  16.0  17.0  18.0  19.0
2  6   7   8  20.0  21.0  22.0  23.0
3  9  10  11   NaN   NaN   NaN   NaN

df11=pd.concat([data1,data2],join='inner',axis=0,ignore_index=True) #纵向合并,只合data1与data2中共有的列,默认join="outer",即缺少的部分填充NaN
print(df11)

执行结果为:
  a   c   d
0   0   1   2
1   3   4   5
2   6   7   8
3   9  10  11
4  12  14  15
5  16  18  19
6  20  22  23

Original: https://blog.csdn.net/seuliuyu/article/details/117731663
Author: littleyu111
Title: Pandas库的使用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/755489/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球