![](https://i-blog.csdnimg.cn/blog_migrate/6f92a6db783fa3d99d8baaae1156cf28.png)
很多数据集存在数据缺失、数据格式错误、错误数据或重复数据的情况,如果要对使数据分析更加准确,就需要对这些没有用的数据进行处理。数据清洗是对一些没有用的数据进行处理的过程。
1、Pandas清洗空值
使用dropna()方法,语法格式如下:
DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
参数说明:
axis:默认为 0,表示逢空值剔除整行,如果设置参数 axis=1 表示逢空值去掉整列。
how:默认为 'any' 如果一行(或一列)里任何一个数据有出现 NA 就去掉整行,如果设置 how='all' 一行(或列)都是 NA 才去掉这整行。
thresh:设置需要多少非空值的数据才可以保留下来的。
subset:设置想要检查的列。如果是多个列,可以使用列名的 list 作为参数。
inplace:如果设置 True,将计算得到的值直接覆盖之前的值并返回 None,修改的是源数据。
测试数据使用excel,如下:
![](https://i-blog.csdnimg.cn/blog_migrate/9174759c1680a02fce1955592221d761.png)
excel数据中包含了空,NAN, NA,n/a等等
实例:
import pandas as pd
missing_values = ["n/a", "na", "--","NAN"]
df = pd.read_excel(r"E:/python.xlsx", sheet_name="Sheet1", na_values=missing_values)
print(df.dropna(axis=0, how='any'))
输出:
年 月 公司 营业额
0 2018 Jan 10104.0 3214324.60
1 2018 Jan 10105.0 14211.79
7 2018 Jan 10113.0 48043.39
10 2018 Jan 10114.0 64959.19
11 2018 Jan 10115.0 70597.79
1.1 使用 isnull() 判断单元格是否为空
实例:
import pandas as pd
missing_values = ["n/a", "na", "--","NAN"]
df = pd.read_excel(r"E:/python.xlsx", sheet_name="Sheet1", na_values=missing_values)
print(df["营业额"].isnull())
输出:
0 False
1 False
2 False
3 True
4 False
5 False
6 False
7 False
8 True
9 False
10 False
11 False
Name: 营业额, dtype: bool
1.2 使用 fillna() 方法来替换一些空字段 或者 指定某列空数据替换
实例:
# 使用12345 替换空字段
import pandas as pd
df3 = pd.read_excel(r"E:/python.xlsx", sheet_name="Sheet1")
df3.fillna(12345,inplace=True)
print(df3)
输出:
年 月 公司 营业额
0 2018 Jan 10104.0 3214324.6
1 2018 Jan 10105.0 14211.79
2 2018 Jan 12345.0 19850.39
3 2018 Jan 12345.0 12345
4 2018 Jan 12345.0 31127.59
5 2018 Jan 12345.0 36766.19
6 2018 12345 12345.0 42404.79
7 2018 Jan 10113.0 48043.39
8 2018 Jan 10114.0 NAN
9 2018 12345 10115.0 59320.59
10 2018 Jan 10114.0 64959.19
11 2018 Jan 10115.0 70597.79
# 使用北京分公司 替换公司为空字段
import pandas as pd
df3 = pd.read_excel(r"E:/python.xlsx", sheet_name="Sheet1")
df3["公司"].fillna("北京分公司",inplace=True)
print(df3.to_string())
输出:
年 月 公司 营业额
0 2018 Jan 10104.0 3214324.6
1 2018 Jan 10105.0 14211.79
2 2018 Jan 北京分公司 19850.39
3 2018 Jan 北京分公司 NaN
4 2018 Jan 北京分公司 31127.59
5 2018 Jan 北京分公司 36766.19
6 2018 NaN 北京分公司 42404.79
7 2018 Jan 10113.0 48043.39
8 2018 Jan 10114.0 NAN
9 2018 NaN 10115.0 59320.59
10 2018 Jan 10114.0 64959.19
11 2018 Jan 10115.0 70597.79
2、Pandas清洗错误数据
数据错误也是很常见,可以通过替换方式
实例:
import pandas as pd
dic = {
"季节": ["春", "夏", "秋", "123"], # 123错误
"月份": [2, 4, 8, 12]
}
df = pd.DataFrame(dic)
print("原始数据输出:\n",df)
df.loc[3, "季节"] = "冬" # 修改数据,替换错误数据
print("修改后输出:\n",df.to_string())
输出:
原始数据输出:
季节 月份
0 春 2
1 夏 4
2 秋 8
3 123 12
修改后输出:
季节 月份
0 春 2
1 夏 4
2 秋 8
3 冬 12