pandas fillna 不起作用
我有一个数据表,里面有一些空值(nans):
>>>df.head()
Out[1]:
JPM US SMALLER COMPANIES C ACC
1990-01-02 NaN
1990-01-03 NaN
1990-01-04 NaN
1990-01-05 NaN
1990-01-08 NaN
我还有另一个数据表,里面有一些值:
>>>t.head()
Out[1]:
1990-01-02 51.95
1990-01-03 52.63
1990-01-04 53.04
1990-01-05 52.07
1990-01-08 51.73
Name: JPM US SMALLER COMPANIES C ACC, dtype: float64
可惜的是,df.fillna这个方法对我来说似乎不管用:
>>>df.fillna( t ).head()
Out[1]:
JPM US SMALLER COMPANIES C ACC
1990-01-02 NaN
1990-01-03 NaN
1990-01-04 NaN
1990-01-05 NaN
1990-01-08 NaN
[5 rows x 1 columns]
为什么会这样呢?我用的是pandas 0.13.1版本。
6 个回答
1
看看为什么在遍历列时,fillna()
不起作用。你可以创建一个 DataFrame
,然后检查下面代码的输出:
for col in df.columns[df.isnull().any()]:
df[col].fillna(df[col].mode(), inplace = True)
#df[col].fillna(df[col].mode()[0], inplace = True)
print(df[col].mode())
#print(df[col].mode()[0])
print(type(df[col].mode()))
#print(type(df[col].mode()[0]))
df.isnull().sum() / df.shape[0] * 100
之前的代码没有报错,但也没有填充 NA 值。注释掉的那几行代码似乎是有效的。
3
你有两个选择:
1) 针对每一列单独设置
cols_fillna = ['column1','column2','column3']
# replace 'NaN' with zero in these columns
for col in cols_fillna:
df[col].fillna(0,inplace=True)
df[col].fillna(0,inplace=True)
2) 针对整个数据表一起设置
df = df.fillna(0)
5
你需要把这个值赋给变量:df = df.fillna(t)
9
另外一种方法:
df = df.replace(np.nan, 0)
#或者你认为合适的其他值
当我在处理完一些字符串替换操作后,紧接着进行Na值处理时,发现使用 df.replace(np.nan, 0)
或 df.fillna(0)
会让我感到困惑。所以要注意你命令的顺序 -> 先进行字符串替换,再填充Na值
87
你需要在代码中加上 inplace=True
这个参数。
df[1].fillna(0, inplace=True)