判断是否为空值
用的函数为isnull()和notnull()
# isnull()函数和notnull()最终输出结果都为
series_obj = pd.Series([1,2,np.nan])
series_obj
-------------------------下面是输出结果---------------------------
0 1.0
1 2.0
2 NaN
dtype: float64
series_obj.isnull() # 输出结果均为布尔值
series_obj.notnull()
---------------------------下面是输出结果-----------------------------
0 False
1 False
2 True
dtype: bool
------------------------------------
0 True
1 True
2 False
dtype: bool
删除空值drop()
dropna()函数
dropna(axis=0,how='any',thresh=None,subset=None,inplace=False)
axis:确定行或列,取值可以为0或1
how:确定过滤的标准,取值可以为any或all
thresh:表示有效数据量的最小要求,若传入了2,则是要求该行或该列至少有两个非NAN值时将其保留
subset:表示在特定的子集中寻找NAN值
inplace:表示是否在原数据上操作为True表示修改原数据
# 下面是一个dropna()的小例子
df_obj=pd.DataFrame({"类别":['小说','散文随笔','青春文学','传记'],"书名":[np.nan,'《皮囊》','《旅程结束》','《老舍自传》'],"作者":['老舍',None,'张其鑫','老舍']})
df_obj
-----------------------------------------下面为输出结果-------------------------------------
类别 书名 作者
0 小说 NaN 老舍
1 散文随笔 《皮囊》 None
2 青春文学 《旅程结束》 张其鑫
3 传记 《老舍自传》 老舍
df_obj.dropna(thresh=3) # 至少有三个非NAN值时将其进行保留
df_obj.dropna(how='any') # 只要有NAN值就将其进行删除,与thresh不能同时用
----------------------------------------下面是输出结果------------------------------------------
类别 书名 作者
2 青春文学 《旅程结束》 张其鑫
3 传记 《老舍自传》 老舍
---------------------------------------------------
类别 书名 作者
2 青春文学 《旅程结束》 张其鑫
3 传记 《老舍自传》 老舍
填充缺失值 fillna()
fillna(value=None,method=None,axis=None,inplace=False,limit=None)
value:用于填充的数据
method:表示填充方式,默认值为None
pad/ffill:向前填充
backfill/bfill:向后填充
value 和 method 不能同时存在
from numpy import NaN
df_obj=pd.DataFrame({'A':[1,2,3,NaN],
'B':[NaN,4,NaN,6],
'C':['a',7,8,9],
'D':[NaN,2,3,NaN]})
df_obj
-------------------------------------下面是输出结果-------------------------------------
A B C D
0 1.0 NaN a NaN
1 2.0 4.0 7 2.0
2 3.0 NaN 8 3.0
3 NaN 6.0 9 NaN
df_obj.fillna('33')
df_obj.fillna(method="ffill")
df_obj.fillna(method="bfill")
# 指定填充列(用字典形式)
df_obj.fillna({'A':3,'B':2})
-----------------------------------下面是输出结果------------------------------------
A B C D
0 1.0 33 a 33
1 2.0 4.0 7 2.0
2 3.0 33 8 3.0
3 33 6.0 9 33
----------------------------------------------
A B C D
0 1.0 NaN a NaN
1 2.0 4.0 7 2.0
2 3.0 4.0 8 3.0
3 3.0 6.0 9 3.0
---------------------------------------------
A B C D
0 1.0 4.0 a 2.0
1 2.0 4.0 7 2.0
2 3.0 6.0 8 3.0
3 NaN 6.0 9 NaN
---------------------------------------------
A B C D
0 1.0 2.0 a NaN
1 2.0 4.0 7 2.0
2 3.0 2.0 8 3.0
3 3.0 6.0 9 NaN
重复值的处理
duplicated() 和 drop_duplicated() ,前者标记是否有重复值,后者删除重复值。
duplicated(subset=None,keep='first')
subset:用于识别重复的列标签或者列标签序列,默认识别所有列标签
first:删除重复项并保留第一次出现的项,取值可以为 first, last 或 False, 他们代的含是:first从前向后查找,除了第一次出现外,其余相同的被标记为重复。last从后向前查找,除了第一次出现外,其余相同的被标记为重复。False所有相同的均标记为重复
duplicated()需要强调的地方
-
只有数据表中两个条目间所有列的内容都相等时,duplicated才会判断为重复值。除此之外,duplicated()方法也可以单独对某一列进行重复值判断
-
duplicated()方法支持从前向后和从后向前两种重复模式值查找模式,默认是从前向后查找判断重复值的换句话说,就是将后出现的相同条目判断为重复值。
import pandas as pd
import numpy as np
person_info = pd.DataFrame({'id':[1,2,3,4,4,5],
'name':['小铭','小月月','彭岩','刘华','刘华','周华'],
'age':[18,18,29,58,58,36],
'height':[180,180,185,175,175,178],
'gender':['女','女','男','男','男','男']})
person_info.duplicated()
-----------------------------------下面是输出结果---------------------------------
0 False
1 False
2 False
3 False
4 True
5 False
dtype: bool
drop_duplicates()
drop_dulicates(subset=None,keep='first',inplace=False)
subset:用于识别重复的列标签或者列标签序列,默认识别所有列标签
first:删除重复项并保留第一次出现的项,取值可以为 first, last 或 False, 他们代的含是:first从前向后查找,除了第一次出现外,其余相同的被标记为重复。last从后向前查找,除了第一次出现外,其余相同的被标记为重复。False所有相同的均标记为重复
inplace:表示是否在原数据上操作。
person_info = pd.DataFrame({'id':[1,2,3,4,4,5],
'name':['小铭','小月月','彭岩','刘华','刘华','周华'],
'age':[18,18,29,58,58,36],
'height':[180,180,185,175,175,178],
'gender':['女','女','男','男','男','男']})
person_info.drop_duplicates()
----------------------------------下面是输出结果--------------------------------
id name age height gender
0 1 小铭 18 180 女
1 2 小月月 18 180 女
2 3 彭岩 29 185 男
3 4 刘华 58 175 男
5 5 周华 36 178 男
•