目录
空值的处理
1、检查是否有空值
2、统计空值的数量
3、删除空值
4、填补空值
用value参数替换空值
将空值替换成上一列的值
将空值替换成上一行的值
将空值替换成下一列的值
将空值替换成下一行的值
重复值的处理
1、检查是否有重复值
2、删除重复行
一、空值的处理
import pandas as pd list1 = [['赵一', 23, '男'], ['钱二', 27, '女'], ['孙三', 26, '女']] list2 = [['赵一', '游泳'], ['李四', '唱歌'], ['周五', '下棋']] df1 = pd.Dataframe(list1, columns=['姓名', '年龄', '性别'], index=['a', 'b', 'c']) df2 = pd.Dataframe(list2, columns=['姓名', '爱好'], index=[1, 2, 3]) df3 = pd.merge(df1, df2, on='姓名', how='outer') print(df3)1、检查是否有空值
isnull()
-
可将dataframe的数据转化为True或者False。
-
可以用来判断各个单元格是否为空。
# 将整个表中的非空值转化为True,空值转化为False # 返回值type:print(df3.isnull())
# 检查任意一列是否又空值 # 返回值type:2、统计空值的数量print(df3.isnull().any())
# 每一列中空值的数量 print(df3.isnull().sum()) # 整个dataframe表中空值的总数 print(df3.isnull().sum().sum()) # 每一行中非空值的数量 print(df3.count(axis=1)) # 每一列中非空值的数量 print(df3.count(axis=0))3、删除空值
dropna(how, axis, subset,inplace )
-
how:how='any' 如果某一行或某一列里任何一个数据有空值就删除;how='all' 如果某一行或某一列里所有数据都是空值就删除。
-
axis:axis=0 逢空值剔除整行;axis=1 逢空值剔除列。
-
subset:指定列。如果是多个列,用list传递参数。
-
添加inplace = True 参数,才能修改源数据。
# 删除包含空值的行 df3 = pd.merge(df1, df2, on='姓名', how='outer') df3.dropna(how='any', axis=0, inplace=True) print(df3) # 删除包含空值的列 df3 = pd.merge(df1, df2, on='姓名', how='outer') df3.dropna(how='any', axis=1, inplace=True) print(df3) # 删除全是空值的行 df3 = pd.merge(df1, df2, on='姓名', how='outer') df3.dropna(how='all', axis=0, inplace=True) print(df3) # 删除全是空值的列 df3 = pd.merge(df1, df2, on='姓名', how='outer') df3.dropna(how='all', axis=1, inplace=True) print(df3) # 删除'年龄'、'性别'、'爱好'三列任意一个有空值的行 df3 = pd.merge(df1, df2, on='姓名', how='outer') df3.dropna(how='any', axis=0, subset=['年龄', '性别', '爱好'], inplace=True) print(df3) # 删除'年龄'、'性别'、'爱好'三列全是空值的行 df3 = pd.merge(df1, df2, on='姓名', how='outer') df3.dropna(how='all', axis=0, subset=['年龄','性别', '爱好'], inplace=True) print(df3)4、填补空值
fillna() 方法来替换空值
4.1 用value参数替换空值df3 = pd.merge(df1, df2, on='姓名', how='outer') print(df3) # 用value参数替换空值 new = df3.fillna(value=0) print(new)
通常利用均值、中位数、和众数填补空值
df3 = pd.merge(df1, df2, on='姓名', how='outer') print(df3) # 用均值填补空值 df3["年龄"].fillna(value=df3["年龄"].mean(), inplace=True) print(df3) # 用中位数填补空值 df3["年龄"].fillna(value=df3["年龄"].median(), inplace=True) print(df3) # 用众数填补空值 df3["年龄"].fillna(value=df3["年龄"].mode()[0], inplace=True) print(df3)4.2.1 将空值替换成上一列的值
(只是举个例子,实际数据中的空值不适合这中替换方式)
df3 = pd.merge(df1, df2, on='姓名', how='outer') print(df3) # 将空值替换成上一列的值 new = df3.fillna(method='ffill', axis=1) print(new)4.2.2 将空值替换成上一行的值
(只是举个例子,实际数据中的空值不适合这中替换方式)
df3 = pd.merge(df1, df2, on='姓名', how='outer') print(df3) # 将空值替换成上一行的值 new = df3.fillna(method='ffill', axis=0) print(new)4.2.3 将空值替换成下一列的值
df3 = pd.merge(df1, df2, on='姓名', how='outer') print(df3) # 将空值替换成下一列值 new = df3.fillna(method='backfill', axis=1) print(new)4.2.4 将空值替换成下一行的值
df3 = pd.merge(df1, df2, on='姓名', how='outer') print(df3) # 将空值替换成下一行的值 new = df3.fillna(method='backfill', axis=1) print(new)二、重复值的处理
import pandas as pd list1 = [['赵一', 23, '男'], ['钱二', 27, '女'], ['孙三', 26, '女'], ['孙三', 26, '女']] list2 = [['赵一', '游泳'], ['李四', '唱歌'], ['周五', '下棋']] df1 = pd.Dataframe(list1, columns=['姓名', '年龄', '性别'], index=['a', 'b', 'c', 'd']) df2 = pd.Dataframe(list2, columns=['姓名', '爱好'], index=[1, 2, 3]) df3 = pd.merge(df1, df2, on='姓名', how='outer') print(df3)
duplicated() 清洗重复数据
1、检查是否有重复值df3 = pd.merge(df1, df2, on='姓名', how='outer') # 返回True,说明有重复值 print(any(df.duplicated()))2、删除重复行
df3 = pd.merge(df1, df2, on='姓名', how='outer') # 删除所有变量都重复的行 df3.drop_duplicates(inplace=True) print(df3)
df3 = pd.merge(df1, df2, on='姓名', how='outer') # 删除'年龄', '性别'两列重复的行 df3.drop_duplicates(subset=['年龄', '性别'], inplace=True) print(df3)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)