熊猫fillna如何确定NaN?

时间:2020-06-08 06:49:15

标签: python pandas nan fillna

使用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

3 个答案:

答案 0 :(得分:1)

这里确实存在轻微的不一致。 isna测试任何空值(None,NaN或NaT),而fillna仅处理NaN。有人可能会说这是一项功能,因为您可以选择所需的版本。

顺便说一句,使用isna可以轻松完成所有空值的填充:

df[df.isna()] = replacement_value

实际原因可能是isnaisnull的别名。

答案 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}