1. 程式人生 > >數據分析學習筆記4-----處理缺失數據

數據分析學習筆記4-----處理缺失數據

浮點 clas taf 方法 fill ilo light .data highlight

處理缺失數據

對於數值數據,pandas使用浮點值NaN(Not a Number)表示缺失數據。我們稱其為哨兵值。

濾除缺失數據

過濾掉缺失數據的辦法有很多種。你可以通過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就會將缺失值替換為那個常數值:

In [27]: df = pd.DataFrame(np.random.randn(7, 3))

In [28]: df.iloc[:4, 1] = NA

In [29]: df.iloc[:2, 2] = NA

In [30]: df
Out[30]: 
          0         1         2
0 -0.204708       NaN       NaN
1 -0.555730       NaN       NaN
2  0.092908       NaN  0.769023
3  1.246435       NaN -1.296221
4  0.274992  0.228913  1.352917
5  0.886429 -2.001637 -0.371843
6  1.669025 -0.438570 -0.539741
In [33]: df.fillna(0)
Out[33]: 
          0         1         2
0 -0.204708  0.000000  0.000000
1 -0.555730  0.000000  0.000000
2  0.092908  0.000000  0.769023
3  1.246435  0.000000 -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

數據轉換

移除重復數據

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   3
5  two   4
6  two   4

DataFrame的duplicated方法返回一個布爾型Series,表示各行是否是重復行(前面出現過的行)

In [47]: data.duplicated()
Out[47]: 
0    False
1    False
2    False
3    False
4    False
5    False
6     True
dtype: bool

數據分析學習筆記4-----處理缺失數據