我有以下字典:
fillna(value={'first_name':'Andrii', 'last_name':'Furmanets', 'created_at':None})
当我将该字典传递给fillna
时,我看到了:
引发ValueError('必须指定填充方法或值')\ nValueError:必须指定填充方法或值\ n“
在我看来,它在None
值上失败了。
我使用pandas版本0.20.3。
答案 0 :(得分:8)
<强>设置强>
考虑示例数据框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
。如果你看一下pd.Series.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
答案 1 :(得分:5)
如果要使用python的None将所有null标准化。
df.fillna(np.nan).replace([np.nan], [None])
第一个fillna
将用Numpy的NaN替换所有(None,NAT,np.nan等),然后用python的None替换Numpy的NaN。
答案 2 :(得分:1)
您使用的是哪种类型的数据结构?这适用于熊猫系列:
import pandas as pd
d = pd.Series({'first_name': 'Andrii', 'last_name':'Furmanets', 'created_at':None})
d = d.fillna('DATE')
答案 3 :(得分:1)
使用None
填充文本的另一种方法。我在熊猫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
答案 4 :(得分:0)
尝试用col
填充日期时间是一个坏主意,这正是pandas NaT
(NotATime)的目的:缺少日期时间。