使用df.fillna()
时,它使用哪个值/函数来确定值是否为NaN
?例如,NaT
不会被填充,但是pd.isnull()
会被填充。
此外,还有一种方法可以将函数解析为fillna
,该函数确定某个值是否为NaN
,例如
df.fillna(na_function = pd.isnull,value= np.nan)
编辑(添加示例):
df=pd.DataFrame(
[[0,"2018-02-10",np.nan],
[None,NaT,0]])
df.isnull()
#[[False,False,True]
#[True,True,False]]
#
df.fillna(np.nan,inplace=True)
#[[0,"2018-02-10",np.nan]
#[np.nan,NaT,0]]
#
我希望它填充所有个NaN / Null值,其中pd.isnull()==True
包括NaT
。
答案 0 :(得分:1)
这里确实存在轻微的不一致。 isna
测试任何空值(None,NaN或NaT),而fillna
仅处理NaN。有人可能会说这是一项功能,因为您可以选择所需的版本。
顺便说一句,使用isna
可以轻松完成所有空值的填充:
df[df.isna()] = replacement_value
实际原因可能是isna
是isnull
的别名。
答案 1 :(得分:1)
假设数据框中具有inoremap <expr> <silent> <cr> pumvisible() ? "\<C-y>" : "\<cr>"
inoremap <expr> <cr> pumvisible() ? ":!\<C-y>" : "\<cr>"
和NaN
值,则始终可以检查NaT
并分别填充它们。像这样:
dtypes
以示例x = df.select_dtypes(exclude=['datetime'])
df[x.columns] = x.fillna(99)
x = df.select_dtypes(include=['datetime'])
df[x.columns] = x.fillna(pd.to_datetime('today'))
为例:
df
答案 2 :(得分:0)
创建替换字典,例如DataFrame.fillna
中的日期时间,字符串和所有其他值:
df=pd.DataFrame(
[[0,"2018-02-10",np.nan, 'a'],
[None,pd.NaT,0, None]])
print (df)
0 1 2 3
0 0.0 2018-02-10 NaN a
1 NaN NaT 0.0 None
dates = df.select_dtypes(['datetime']).columns
strings = df.select_dtypes(['object']).columns
d1 = dict.fromkeys(dates, pd.Timestamp('2000-01-01'))
d2 = dict.fromkeys(strings, 'b')
d3 = dict.fromkeys(df.columns.difference(dates.union(strings)), 1)
#https://stackoverflow.com/a/26853961
d = {**d1, **d2, **d3}
df = df.fillna(d)
print (df)
0 1 2 3
0 0.0 2018-02-10 1.0 a
1 1.0 2000-01-01 0.0 b
详细信息:
print (d)
{1: Timestamp('2000-01-01 00:00:00'), 3: 'b', 0: 1, 2: 1, 4: 1}