如何在pandas fillna中处理“None”值

uplii1fm  于 2023-11-15  发布在  其他
关注(0)|答案(5)|浏览(205)

我有以下字典:
第一个月
当我把这个字典传递给fillna时,我看到:
raise ValueError(“必须指定填充方法或值”)\nValueError:必须指定填充方法或值\n”
在我看来,它在None值上失败了。
我用的是pandas版本0.20.3。

jckbn6z7

jckbn6z71#

如果你想用Python的None来规范化所有的null。

df.fillna(np.nan).replace([np.nan], [None])

字符串
第一个fillna将用Numpy的NaN替换所有(None,NAT,np.nan等),然后用python的None替换Numpy的NaN。

ma8fv8wu

ma8fv8wu2#

设置

考虑示例框架df

df = pd.DataFrame(dict(A=[1, None], B=[None, 2], C=[None, 'D']))

df

     A    B     C
0  1.0  NaN  None
1  NaN  2.0     D

字符串
我可以确认错误

df.fillna(dict(A=1, B=None, C=4))
ValueError: must specify a fill method or value

这是因为pandas循环遍历字典中的键,并为每个相关列执行fillna

Series.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)


您将看到默认值为None

df.A.fillna(None)


或等效地

df.A.fillna()


我要补充的是,考虑到你试图用空值填充空值,我并不感到非常惊讶。
你需要的是

解决方案

在你想用非空值填充的列上使用pd.DataFrame.fillna。然后在你想用一个空值交换另一个空值的特定列上使用pd.DataFrame.replace

df.fillna(dict(A=1, C=2)).replace(dict(B={np.nan: None}))

     A     B  C
0  1.0  None  2
1  1.0     2  D

vd2z7a6w

vd2z7a6w3#

您使用的是哪种类型的数据结构?这适用于pandas Series:

import pandas as pd

d = pd.Series({'first_name': 'Andrii', 'last_name':'Furmanets', 'created_at':None})
d = d.fillna('DATE')

字符串

g2ieeal7

g2ieeal74#

None填充的另一种方法。我在pandas 0.24.0上,我这样做是为了将NULL值插入到POSTGRES数据库中。

# Stealing @pIRSquared dataframe
df = pd.DataFrame(dict(A=[1, None], B=[None, 2], C=[None, 'D']))

df

     A    B     C
0  1.0  NaN  None
1  NaN  2.0     D

# fill NaN with None. Basically it says, fill with None whenever you see NULL value.
df['A'] = np.where(df['A'].isnull(), None, df['A'])
df['B'] = np.where(df['B'].isnull(), None, df['B'])

# Result
df

     A    B     C
0  1.0  None  None
1  None  2.0     D

字符串

wd2eg0qa

wd2eg0qa5#

**解决方案:**使用pandas pd.NA,而不是基本的Python None

df = pd.DataFrame({'first_name':pd.NA, 'last_name':pd.NA, 'created_at':pd.NA}, index=[0])

df = df.fillna(value={'first_name':'Andrii', 'last_name':'Furmanets', 'created_at':pd.NA})

字符串
通常情况下,最好保持pandas NA不变。不要尝试更改它。NA的存在是一个特性,而不是问题。NA在其他pandas函数中得到正确处理(但不是numpy)

  • 如果你坚持认为python None应该替换pandas NA's,那么请告诉我们NA导致问题的地方后面的缺失代码;这通常是XY问题。

相关问题