Python语言pandas包关于None和NaN值的处理(二)

By sto at 2019-03-27 • 0人收藏 • 127人看过

3 填充None或NaN的值

3.1 使用0填充

>>> import pandas as pd
>>> import numpy as np
>>> from numpy import nan as NA
>>> df = pd.DataFrame(np.random.randn(7, 3))
>>> df.iloc[:5, 1] = NA
>>> df.iloc[:3, 2] = NA
>>> df
          0         1         2
0  1.029707       NaN       NaN
1 -0.948014       NaN       NaN
2 -1.276836       NaN       NaN
3 -0.383918       NaN -1.705022
4  0.638936       NaN -1.011704
5  1.099203 -2.473579  1.364761
6 -1.099910 -0.724829  1.162532
>>> df.fillna(0)
          0         1         2
0  1.029707  0.000000  0.000000
1 -0.948014  0.000000  0.000000
2 -1.276836  0.000000  0.000000
3 -0.383918  0.000000 -1.705022
4  0.638936  0.000000 -1.011704
5  1.099203 -2.473579  1.364761
6 -1.099910 -0.724829  1.162532


3.2 使用字典dict填充

>>> df.fillna({1: 3, 2: 0.99})
          0         1         2
0  1.029707  3.000000  0.990000
1 -0.948014  3.000000  0.990000
2 -1.276836  3.000000  0.990000
3 -0.383918  3.000000 -1.705022
4  0.638936  3.000000 -1.011704
5  1.099203 -2.473579  1.364761
6 -1.099910 -0.724829  1.162532


3.3 使用上一行的值填充ffill


>>> df
          0         1         2
0  1.029707  3.000000  0.990000
1 -0.948014       NaN       NaN
2 -1.276836       NaN       NaN
3 -0.383918       NaN -1.705022
4  0.638936       NaN -1.011704
5  1.099203 -2.473579  1.364761
6 -1.099910 -0.724829  1.162532
>>> 
>>> df.fillna(method='ffill')
          0         1         2
0  1.029707  3.000000  0.990000
1 -0.948014  3.000000  0.990000
2 -1.276836  3.000000  0.990000
3 -0.383918  3.000000 -1.705022
4  0.638936  3.000000 -1.011704
5  1.099203 -2.473579  1.364761
6 -1.099910 -0.724829  1.162532

3.4 使用平均值填充

(1)使用series的平均值或中位数填充

>>> data = pd.Series([1.1, NA, NA, 13, NA, 2.2])
>>> data.fillna(data.mean())
0     1.100000
1     5.433333
2     5.433333
3    13.000000
4     5.433333
5     2.200000
dtype: float64


(2)限制填充NA的个数

>>> data.fillna(data.mean(), limit=2)
0     1.100000
1     5.433333
2     5.433333
3    13.000000
4          NaN
5     2.200000
dtype: float64


附: 直接更改数据


>>> df
          0         1         2
0  1.029707       NaN       NaN
1 -0.948014       NaN       NaN
2 -1.276836       NaN       NaN
3 -0.383918       NaN -1.705022
4  0.638936       NaN -1.011704
5  1.099203 -2.473579  1.364761
6 -1.099910 -0.724829  1.162532
>>> df.fillna({1: 3, 2: 0.99}, inplace=True)
>>> df
          0         1         2
0  1.029707  3.000000  0.990000
1 -0.948014  3.000000  0.990000
2 -1.276836  3.000000  0.990000
3 -0.383918  3.000000 -1.705022
4  0.638936  3.000000 -1.011704
5  1.099203 -2.473579  1.364761
6 -1.099910 -0.724829  1.162532


登录后方可回帖

信息栏
数据人网是数据人学习、交流和分享的平台,专注于从数据中学习,努力发觉数据之洞见,积极利用数据之价值
Loading...