-
处理缺失数据
pandas 使用浮点值 NaN (Not a Number)表示浮点和非浮点数组中的缺失数据。它只是一个便于被检测出来的标记而已。
In [168]: data = Series(['a','b',np.nan,'d']) In [169]: data Out[169]: 0 a 1 b 2 NaN 3 d dtype: object In [170]: data.isnull() Out[170]: 0 False 1 False 2 True 3 False dtype: bool
Python 内置的 None 值也会被当做 NA 处理:
In [171]: data[0] = None In [172]: data.isnull() Out[172]: 0 True 1 False 2 True 3 False dtype: bool
-
滤除缺失数据
对于 Series,dropna 返回一个仅含非空数据和索引值的 Series:
In [173]: data Out[173]: 0 None 1 b 2 NaN 3 d dtype: object In [174]: data.dropna() Out[174]: 1 b 3 d dtype: object # 也可以通过布尔型索引达到这个目的 In [175]: data[data.notnull()] Out[175]: 1 b 3 d dtype: object
而对于 DataFrame 对象,稍微有点复杂,dropna 默认会丢弃任何含有缺失值的行:
In [176]: data = DataFrame([[1,2,3],[1,np.nan,np.nan], ...: [np.nan,np.nan,np.nan],[np.nan,4,5]]) In [177]: cleaned = data.dropna() In [178]: data Out[178]: 0 1 2 0 1.0 2.0 3.0 1 1.0 NaN NaN 2 NaN NaN NaN 3 NaN 4.0 5.0 In [179]: cleaned Out[179]: 0 1 2 0 1.0 2.0 3.0 # 传入 how='all' 将只丢弃全为 NA 的那些行 In [181]: data.dropna(how='all') Out[181]: 0 1 2 0 1.0 2.0 3.0 1 1.0 NaN NaN 3 NaN 4.0 5.0
要丢弃列,需要传入 axis=1,表示在列上生效:
In [183]: data[4] = np.nan In [184]: data Out[184]: 0 1 2 4 0 1.0 2.0 3.0 NaN 1 1.0 NaN NaN NaN 2 NaN NaN NaN NaN 3 NaN 4.0 5.0 NaN In [185]: data.dropna(axis=1,how='all') Out[185]: 0 1 2 0 1.0 2.0 3.0 1 1.0 NaN NaN 2 NaN NaN NaN 3 NaN 4.0 5.0
-
填充缺失数据
要填充缺失的数据,主要使用 fillna 方法,通过调用 fillna(Number) 就会将缺失值替换为 Number 数值。
In [186]: df Out[186]: one two a 1.0 NaN b 2.0 3.0 c NaN NaN d 0.0 2.0 In [187]: df.fillna(100) Out[187]: one two a 1.0 100.0 b 2.0 3.0 c 100.0 100.0 d 0.0 2.0 # fillna 默认会返回新对象,但是传入 inplace=True 会对原有对象进行就地修改 In [188]: df.fillna(200,inplace=True) In [189]: df Out[189]: one two a 1.0 200.0 b 2.0 3.0 c 200.0 200.0 d 0.0 2.0
-
层次化索引
P164