我有以下字典:
fillna(value={'first_name':'Andrii', 'last_name':'Furmanets', 'created_at':None})
当我把那本字典传给fillna我时,我看到:
提高ValueError('必须指定填充方法或值')\nValueError:必须指定填充方法或值\n"
在我看来,它失败了None价值.
我使用pandas版本0.20.3.
Asa*_*k91 26
如果您想使用 python 的 None 规范化所有空值。
df.fillna(np.nan).replace([np.nan], [None])
Run Code Online (Sandbox Code Playgroud)
第一个fillna将用 Numpy 的 NaN 替换所有(无、NAT、np.nan 等),然后用 python 的无替换 Numpy 的 NaN。
piR*_*red 10
设置
考虑示例数据帧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
Run Code Online (Sandbox Code Playgroud)
我可以确认错误
df.fillna(dict(A=1, B=None, C=4))
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)ValueError: must specify a fill method or value
发生这种情况是因为pandas循环遍历字典中的键并fillna为每个相关列执行a .如果你看一下pd.Series.fillna方法的签名
Run Code Online (Sandbox Code Playgroud)Series.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)
你会看到默认值是None.所以我们可以复制这个错误
df.A.fillna(None)
Run Code Online (Sandbox Code Playgroud)
或者等价
df.A.fillna()
Run Code Online (Sandbox Code Playgroud)
我要补充一点,考虑到你试图用空值填充空值,我并不感到非常惊讶.
你需要的是一个解决方案
解决方案对要使用非空值填充的列
使用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
Run Code Online (Sandbox Code Playgroud)
您使用什么类型的数据结构?这适用于 pandas 系列:
import pandas as pd
d = pd.Series({'first_name': 'Andrii', 'last_name':'Furmanets', 'created_at':None})
d = d.fillna('DATE')
Run Code Online (Sandbox Code Playgroud)