Python 从入门到实战45(Pandas数据操作)

        我们的目标是:通过这一套资料学习下来,可以熟练掌握python基础,然后结合经典实例、实践相结合,使我们完全掌握python,并做到独立完成项目开发的能力。

上篇文章我们学习了pandas数据读写的相关基础知识。今天学习一下pandas数据操作的相关操作。

DataFrame 对象是pandas 模块中最常用的对象,该对象所呈现的数据与excel表格相似。因此,我们需要了解DataFrame 对象中的各种数据操作方法。

1、增加数据

DataFrame 对象添加一列数据,可以先创建列名,然后为其赋值。如下:

#DataFrame 对象添加一列数据
data = {'A':[1,2,3,4,5],
        'B':[10,20,30,40,50],
        'C':[11,22,33,44,54]
}   #字典形式的数据
data_frame = pd.DataFrame(data)  #创建DataFrame对象
#添加一列数据:D列
data_frame['D']=[100,200,300,400,500]
print(data_frame)

执行结果:

  A   B   C    D

0  1  10  11  100

1  2  20  22  200

2  3  30  33  300

3  4  40  44  400

4  5  50  54  500

2、删除数据

pandas 模块提供了drop()函数,用于删除DataFrame对象中的某行或者某列数据。

drop()函数常用参数:

参数名

参数含义

labels

指定要删除的行索引或列名,可以是单个索引/标签、索引/标签列表或索引/标签数组。如果指定的是列名,需要将axis参数设置为1或columns‌

axis

设置删除行还是列,0表示删除行,1表示删除列,默认值为0。如果删除列,需要将axis设置为1或columns‌

index

设置要删除的行的索引或标签,相当于设置labels且axis为0‌

columns

设置要删除的列的索引或标签,相当于设置labels且axis为1或columns‌

level

如果索引是多重索引,指定按多重索引中的哪个等级的索引删除,可以传入多重索引的下标或名称‌

inplace

设置是否在DataFrame本身删除数据,默认为False,即在DataFrame的副本里删除数据,返回删除数据后的DataFrame。如果设置为True,则在调用drop()的DataFrame本身执行删除,返回值为None‌

errors

设置是否抛出错误,可以设置的值有{‘ignore’, ‘raise’},默认raise,表示抛出错误。ignore表示忽略错误,跳过传入的错误索引名或列名,正确的索引名或列名不受影响,正常执行删除‌

举例说明:

#DataFrame 对象添加一列数据
data = {'A':[1,2,3,4,5],
        'B':[10,20,30,40,50],
        'C':[11,22,33,44,54]
}   #字典形式的数据
data_frame = pd.DataFrame(data)  #创建DataFrame对象
#添加一列数据:D列
data_frame['D']=[100,200,300,400,500]
print(data_frame)

#删除行数据
data_frame.drop([0],inplace=True)
print("删除第一行数据后的结果:\n",data_frame)
#删除列数据:A列
data_frame.drop(labels="A",axis=1,inplace=True)
print("删除A行数据后的结果:\n",data_frame)

执行结果:

A   B   C    D

0  1  10  11  100

1  2  20  22  200

2  3  30  33  300

3  4  40  44  400

4  5  50  54  500

删除第一行数据后的结果:

    A   B   C    D

1  2  20  22  200

2  3  30  33  300

3  4  40  44  400

4  5  50  54  500

删除A行数据后的结果:

     B   C    D

1  20  22  200

2  30  33  300

3  40  44  400

4  50  54  500

如删除前3行数据

data_frame.drop(label=range(0,3),axis=0,inplace=True)

3、修改数据

修改DataFrame 中某一列中的某个元素,通过赋值方式来实现

#DataFrame 对象修改一列中某个索引的数据
data = {'A':[1,2,3,4,5],
        'B':[10,20,30,40,50],
        'C':[11,22,33,44,54]
}   #字典形式的数据
data_frame = pd.DataFrame(data)  #创建DataFrame 对象
data_frame["A"][1] = 22   #A列中索引为1的值修改为22
print("修改后的数据:\n",data_frame)

执行结果:

修改后的数据:

     A   B   C

0   1  10  11

1  22  20  22

2   3  30  33

3   4  40  44

4   5  50  54

修改DataFrame 中某一列中的元素,通过赋值方式来实现

data = {'A':[1,2,3,4,5],
        'B':[10,20,30,40,50],
        'C':[11,22,33,44,54]
}   #字典形式的数据
data_frame = pd.DataFrame(data)  #创建DataFrame 对象
data_frame["A"][1] = 22   #A列中索引为1的值修改为22
print("修改后的数据:\n",data_frame)
#修改一整列的数据
data_frame["B"] = [101,202,303,404,505]
print("修改一整列的数据后:\n",data_frame)

执行结果:

修改一整列的数据后:

     A    B   C

0   1  101  11

1  22  202  22

2   3  303  33

3   4  404  44

4   5  505  54

4、查询数据

如获取DataFrame 对象中某一列的数据。可以通过指定列名或者直接调用列名的属性来获取指定列的数据。

import pandas as pd #导入pandas 模块

#DataFrame 对象查询数据
data ={
        "A":[10,20,30,40],
        "B":[12,22,32,42],
        "C":[14,24,34,44]
}  #字典形式的数据
data_frame = pd.DataFrame(data)  #字典数据形成DataFrame 对象
print("指定列名的数据为:\n",data_frame["A"])
print("指定列名属性的数据为:\n",data_frame.B)

执行结果:

指定列名的数据为:

 0    10

1    20

2    30

3    40

Name: A, dtype: int64

指定列名属性的数据为:

 0    12

1    22

2    32

3    42

Name: B, dtype: int64

Process finished with exit code 0

也可以查询多行,如第一到第二行的数据

print("查询两行的数据:\n",data_frame[0:2])

输出:

查询两行的数据:

     A   B   C

0  10  12  14

1  20  22  24

5、NaN 数据处理

1)将元素修改为NaN

NaN 在numpy 模块中用于表示空缺数据,若要将某个数据元素修改为NaN,只需要调用numpy.NaN为需要修改的元素赋值即可。

如下:

data ={
        "A":[10,20,30,40],
        "B":[12,22,32,42],
        "C":[14,24,34,44]
}  #字典形式的数据
data_frame = pd.DataFrame(data)  #字典数据形成DataFrame 对象
data_frame["A"][0] =numpy.nan

输出结果:

将第一列第一行的数据改为NaN后的数据:

       A   B   C

0   NaN  12  14

1  20.0  22  24

2  30.0  32  34

3  40.0  42  44

2)统计NaN数据

pandas 提供了可以快速识别数据中的空缺值非空缺值的方法:isnull()方法用于识别数据中是否有空缺值,若有空缺值值返回为true。notnull()方法用于识别数据中是否有非空缺值,若有非空缺值值返回为true。

举例说明统计函数的使用方法:

data ={
        "A":[10,20,30,40],
        "B":[12,22,32,42],
        "C":[14,24,34,44]
}  #字典形式的数据
data_frame = pd.DataFrame(data)  #字典数据形成DataFrame 对象
data_frame["A"][0] =numpy.nan

print("每列空缺值数量为:\n",data_frame.isnull().sum())#输出数据中空缺值数量
print("每列非空缺值数量为:\n",data_frame.notnull().sum())#输出数据中非空缺值数量

执行结果:

每列空缺值数量为:

 A    1

B    0

C    0

dtype: int64

每列非空缺值数量为:

 A    3

B    4

C    4

dtype: int64

3)筛选NaN

在实现数据中NaN元素的筛选时,需要使用dropna()函数来实现,例如,删除包含NaN元素所在的整行数据,如下:

data ={
        "A":[10,20,30,40],
        "B":[12,22,32,42],
        "C":[14,24,34,44]
}  #字典形式的数据
data_frame = pd.DataFrame(data)  #字典数据形成DataFrame 对象
data_frame["A"][0] =numpy.nan
data_frame.dropna(axis=0,inplace=True)
print("删除有NaN元素所在的整行数据后为:\n",data_frame)

执行结果:

删除有NaN元素所在的整行数据后为:

       A   B   C

1  20.0  22  24

2  30.0  32  34

3  40.0  42  44

另外,若是要删除含有NaN数据的那一列数据,axis 参数设置为1;

data_frame.dropna(axis=1,inplace=True)
print("删除有NaN元素所在的整列数据后为:\n",data_frame)

执行结果:

删除有NaN元素所在的整列数据后为:

     B   C

0  12  14

1  22  24

2  32  34

3  42  44

4)NaN元素的替换

可以使用fillna()函数将数据中NaN元素替换为同一个元素。如下:

#NaN元素的替换
data ={
        "A":[10,None,30,40],
        "B":[12,22,None,42],
        "C":[14,24,34,None]
}  #字典形式的数据
data_frame = pd.DataFrame(data) #创建DataFrame 对象
data_frame.fillna(0,inplace=True)  #将所有数据中NaN元素替换为0
print(data_frame)#输出DataFrame 对象内容

执行结果:

A     B     C

0  10.0  12.0  14.0

1   0.0  22.0  24.0

2  30.0   0.0  34.0

3  40.0  42.0   0.0

Process finished with exit code 0

另外,如果需要将不同列中的NaN元素修改为不同的元素值,可以通过字典的方式对每列进行依次修改,如下:

#NaN元素每列进行不同的替换
data ={
        "A":[10,None,30,40],
        "B":[12,22,None,42],
        "C":[14,24,34,None]
}  #字典形式的数据
data_frame = pd.DataFrame(data) #创建DataFrame 对象
data_frame.fillna({"A":0,"B":110},inplace=True)  #将所有数据中NaN元素替换为0
print(data_frame)#输出DataFrame 对象内容

执行结果:

      A      B     C

0  10.0   12.0  14.0

1   0.0   22.0  24.0

2  30.0  110.0  34.0

3  40.0   42.0   NaN    —–第3列没有替换。

今天先写学习到这里了,每天进步一点点。明天也要加油啊!

作者:立黄昏粥可温

物联沃分享整理
物联沃-IOTWORD物联网 » Python 从入门到实战45(Pandas数据操作)

发表回复