1.缺失数据
pandas使用浮点值NaN (Not a Number)表示浮点和非浮点数组中的缺失数据。
2.滤除缺失数据
对于一个Series, dropna返回一个仅含非空数据和索引值的Series。当然,也可以通过布尔型索引达到这个目的。
from numpy import nan as NA
from pandas import Series
data = Series([1, NA, 3.5, NA, 7])
data.dropna()
'''0 1.0
2 3.5
4 7.0'''
data[data.notnull()]
对于DataFrame对象,事情有点复杂。你可能希望丢弃全NA或含有NA的行或列。
dropna默认丢弃任何含有缺失值的行。
给dropna传入how=' all ',将只丢弃全为NA的那些行。
import pandas as pd
data = pd.DataFrame([[1, 6.5, 2], [1, NA, NA], [NA, NA, NA]])
data.dropna()
'''
0 1 2
0 1.0 6.5 2.0'''
data.dropna(how='all')
'''
0 1 2
0 1.0 6.5 2.0
1 1.0 NaN NaN'''
要用dropna丢弃列,只需传入axis=1即可。
data[4] = NA
data
'''
0 1 2 4
0 1.0 6.5 2.0 NaN
1 1.0 NaN NaN NaN
2 NaN NaN NaN NaN'''
data.dropna(axis=1,how='all')
'''
0 1 2
0 1.0 6.5 2.0
1 1.0 NaN NaN
2 NaN NaN NaN'''
3.填充缺失数据
若不想滤除缺失数据,而是希望通过其他方式填补那些“空洞”。
对于大多数情况而言,fillna方法是最主要的函数.通过一个常数调用fillna就会将缺失值替换为那个常数值。
df
'''
0 1 2
0 -0.837610 NaN 1.092551
1 -1.753719 NaN -0.292386
2 -0.893664 NaN 1.288066'''
df.fillna(0)
'''
0 1 2
0 -0.837610 0.0 1.092551
1 -1.753719 0.0 -0.292386
2 -0.893664 0.0 1.288066'''
若是通过一个字典调用fillna,就可以实现对不同的列填充不同的值。
df[3] = NA
df
'''
0 1 2 3
0 -0.837610 NaN 1.092551 NaN
1 -1.753719 NaN -0.292386 NaN
2 -0.893664 NaN 1.288066 NaN'''
df.fillna({1: 0.5, 3: -1})
'''
0 1 2 3
0 -0.837610 0.5 1.092551 -1.0
1 -1.753719 0.5 -0.292386 -1.0
2 -0.893664 0.5 1.288066 -1.0'''
fillna默认会返回新对象,但也可以对现有对象进行就地修改。
对reindex有效的那些插值方法也可用于fillna。
df = df.fillna(0, inplace=True) //inplace修改调用者对象而不产生副本
df
'''
0 1 2 3
0 -0.837610 0.0 1.092551 0.0
1 -1.753719 0.0 -0.292386 0.0
2 -0.893664 0.0 1.288066 0.0'''