目录

空值的处理

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: <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)

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐