python学习 --DataFrame数据清洗(空值、重复值)
目录空值的处理1、检查是否有空值2、统计空值的数量3、删除空值4、填补空值用value参数替换空值将空值替换成上一列的值将空值替换成上一行的值将空值替换成下一列的值将空值替换成下一行的值重复值的处理1、检查是否有重复值2、删除重复行一、空值的处理import pandas as pdlist1 = [['赵一', 23, '男'], ['钱二', 27, '女'], ['孙三', 26, '女'
·
目录
一、空值的处理
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: <class 'pandas.core.frame.DataFrame'>
print(df3.isnull())
# 检查任意一列是否又空值
# 返回值type: <class 'pandas.core.series.Series'>
print(df3.isnull().any())
2、统计空值的数量
# 每一列中空值的数量
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)
更多推荐
已为社区贡献3条内容
所有评论(0)