数据清洗是对一些没有用的数据进行处理的过程。很多数据集存在数据缺失、数据格式错误、数据错误或数据重复的情况,如果要使数据分析更加准确,就需要对这些没有用的数据进行处理。
这里使用的测试数据是clean-data.csv,如图3-10所示。这个表包含4种空数据:n/a、NA、--、na。
我们可以通过isnull()判断各个单元格是否为空,代码如下。这个例子中,我们看到Pandas把n/a和NA当作空数据,na不是空数据,不符合我们的要求,可以指定空数据类型。
import pandas as pd
missing_values = ["n/a", "na", "--"]
df = pd.read_csv('clean-data.csv', na_values = missing_values)
print (df['NUM_BEDROOMS'])
print (df['NUM_BEDROOMS'].isnull())
运行结果如下:
0 3.0
1 3.0
2 NaN
3 1.0
4 3.0
5 NaN
6 2.0
7 1.0
8 NaN
Name: NUM_BEDROOMS, dtype: float64
0 False
1 False
2 True
3 False
4 False
5 True
6 False
7 False
8 True
Name: NUM_BEDROOMS, dtype: bool
在下面的代码中,dropna()方法是删除包含空数据的行。默认情况下,dropna()方法返回一个新的 DataFrame,不会修改源数据(如果你要修改源数据 DataFrame, 可以使用 inplace = True 参数)。我们可以使用fillna()方法来替换一些空字段,也可以指定某一列来替换数据。
import pandas as pd
df = pd.read_csv('clean-data.csv')
new_df = df.dropna()
print(new_df.to_string())
new_df2=df.fillna('unknown')
print(new_df2.to_string())
new_df3=df['PID'].fillna('unknown')
print(new_df3.to_string())
运行结果如图3-11所示。
通常替换空单元格的方法是计算列的均值、中位数值或众数。Pandas使用 mean()、median() 和 mode() 方法计算列的均值(所有值加起来的平均值)、中位数值(排序后排在中间的数)和众数(出现频率最高的数)。这些情况请读者自行测试一下。
本文节选自《PyTorch深度学习与企业级项目实战》,获出版社和作者授权发布。