python学习 –DataFrame数据清洗(空值、重复值)

目录

空值的处理

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)

python学习 --DataFrame数据清洗(空值、重复值)

1、检查是否有空值

isnull()

  • 可将dataframe的数据转化为True或者False。
  • 可以用来判断各个单元格是否为空。
将整个表中的非空值转化为True,空值转化为False
返回值type:
print(df3.isnull())  

python学习 --DataFrame数据清洗(空值、重复值)
检查任意一列是否又空值
返回值type:
print(df3.isnull().any())  

python学习 --DataFrame数据清洗(空值、重复值)

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)

python学习 --DataFrame数据清洗(空值、重复值)

通常利用均值、中位数、和众数填补空值

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)

python学习 --DataFrame数据清洗(空值、重复值)

4.2.2 将空值替换成上一行的值

(只是举个例子,实际数据中的空值不适合这中替换方式)

df3 = pd.merge(df1, df2, on='姓名', how='outer')
print(df3)
将空值替换成上一行的值
new = df3.fillna(method='ffill', axis=0)
print(new)

python学习 --DataFrame数据清洗(空值、重复值)

4.2.3 将空值替换成下一列的值

df3 = pd.merge(df1, df2, on='姓名', how='outer')
print(df3)
将空值替换成下一列值
new = df3.fillna(method='backfill', axis=1)
print(new)

python学习 --DataFrame数据清洗(空值、重复值)

4.2.4 将空值替换成下一行的值

df3 = pd.merge(df1, df2, on='姓名', how='outer')
print(df3)
将空值替换成下一行的值
new = df3.fillna(method='backfill', axis=1)
print(new)

python学习 --DataFrame数据清洗(空值、重复值)

二、重复值的处理

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)

python学习 --DataFrame数据清洗(空值、重复值)
df3 = pd.merge(df1, df2, on='姓名', how='outer')
 删除'年龄', '性别'两列重复的行
df3.drop_duplicates(subset=['年龄', '性别'], inplace=True)
print(df3)

python学习 --DataFrame数据清洗(空值、重复值)

Original: https://blog.csdn.net/m0_60392490/article/details/122264139
Author: 悠闲的小鱼Liu
Title: python学习 –DataFrame数据清洗(空值、重复值)

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

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

(0)

大家都在看

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