利用python进行数据分析(其三)
数据清洗和准备
在数据分析和建模的过程中,在数据准备上(加载、清理、转换以及重塑)需要相当多的时间。因此,pandas和内置的Python标准库提供了一组高级的、灵活的、快速的工具,可以有效地将数据规整成所想要的格式。
1. 处理缺失数据
缺失数据在pandas中呈现的方式比较不完美,对于数值数据,pandas使用浮点值NAN(Not a Number)表示缺失数据,即哨兵值,可以方便检测出缺失值:
In [10]: string_data = pd.Series(['aardvark', 'artichoke', np.na
n, 'avocado'])
In [11]: string_data
Out[11]:
0 aardvark
1 artichoke
2 NaN
3 avocado
dtype: object
In [12]: string_data.isnull()
Out[12]:
0 False
1 False
2 True
3 False
dtype: bool
pandas项目中还在不断优化内部细节以更好处理缺失数据,向用户API功能,例如pandas.isnull,去除冗余细节。以下列出一些关于缺失数据处理的函数:
滤除缺失数据
过滤缺失数据有多中方法,可以通过pandas.isnull或布尔索引的手工方法,但dropna更实用。对于一个Series,dropna返回一个仅含非空数据和索引值的Series:
In [15]: from numpy import nan as NA
In [16]: data = pd.Series([1, NA, 3.5, NA, 7])
In [17]: data.dropna()
Out[17]:
0 1.0
2 3.5
4 7.0
dtype: float64
填充缺失数据
对于大多数情况,fillna方法是主要填补缺失数据的函数,通过一个常数调用fillna就会将缺失值替换成那个常数值:
In [34]: df.fillna({1: 0.5, 2: 0})
Out[34]:
0 1 2
0 -0.204708 0.500000 0.000000
1 -0.555730 0.500000 0.000000
2 0.092908 0.500000 0.769023
3 1.246435 0.500000 -1.296221
4 0.274992 0.228913 1.352917
5 0.886429 -2.001637 -0.371843
6 1.669025 -0.438570 -0.539741
以下列出fillna的参考:
In [34]: df.fillna({1: 0.5, 2: 0})
Out[34]:
0 1 2
0 -0.204708 0.500000 0.000000
1 -0.555730 0.500000 0.000000
2 0.092908 0.500000 0.769023
3 1.246435 0.500000 -1.296221
4 0.274992 0.228913 1.352917
5 0.886429 -2.001637 -0.371843
6 1.669025 -0.438570 -0.539741
2.数据转换
数据转换主要指的是过滤、清理以及其他转换工作
移除重复数据
DataFrame中出现重复行有多种原因,例如:
In [45]: data = pd.DataFrame({'k1': ['one', 'two'] * 3 + ['two']
,
....: 'k2': [1, 1, 2, 3, 3, 4, 4]})
In [46]: data
Out[46]:
k1 k2
0 one 1
1 two 1
2 one 2
3 two 3
4 one