Python 如何继续使用fillna中的'None'值

Python 如何继续使用fillna中的'None'值,python,pandas,Python,Pandas,我有以下字典: fillna(值={'first_name':'Andrii','last_name':'Furmanets','created_at':None}) 当我把字典传给fillna时,我看到: raise VALUERROR('必须指定填充方法或值')\n VALUERROR:必须指定填充方法或值\n 在我看来,它在None值上失败 我使用的是pandas版本0.20.3。您使用的是什么类型的数据结构?这适用于pandas系列: import pandas as pd d = p

我有以下字典:

fillna(值={'first_name':'Andrii','last_name':'Furmanets','created_at':None})

当我把字典传给fillna时,我看到:

raise VALUERROR('必须指定填充方法或值')\n VALUERROR:必须指定填充方法或值\n

在我看来,它在
None
值上失败


我使用的是pandas版本0.20.3。

您使用的是什么类型的数据结构?这适用于pandas系列:

import pandas as pd

d = pd.Series({'first_name': 'Andrii', 'last_name':'Furmanets', 'created_at':None})
d = d.fillna('DATE')
设置
考虑样例数据文件<代码> 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))
之所以会发生这种情况,是因为pandas在字典中的键之间循环,并对每个相关列执行
fillna

您将看到默认值为
None
。因此,我们可以使用

df.A.fillna(None)
或同等地

df.A.fillna()
我要补充的是,考虑到您试图用空值填充空值,我并不感到非常惊讶


你需要的是一个变通的方法

解决方案
在要用非空值填充的列上使用。然后在要用一个空值替换另一个空值的特定列上使用

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

使用
None
填充NA的另一种方法。我使用的是pandas
0.24.0
,我这样做是为了向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


尝试用
None
填充datetime是个坏主意,这正是(NotATime)的目的:用于缺少的datetime。

如果您想用python的None规范化所有空值

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

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

我使用字典而不是字符串。你打算用什么替换
None
呢?甚至可能是
“None”“
。在放入
fillna
之前,我将dict标准化。正如你提到的。谢谢。在float列中,没有一个事实上由np.nan表示(在大多数类型中)。所以这没有任何意义。从
d={'first_name':'Andrii','last_name':'Furmanets'}
这本词典来自外部,必须经过pandas,在字段中有created_,在我看来它与pandas 0.18.0一起工作。尝试用
None
填充日期时间是个坏主意,这就是(NotATime),用于:缺少日期时间。I
value
作为
fillna
中的参数,如下所示:
df.fillna(value=dict(A=1,B=None,C=4))
是否相同?是。这是一样的。
索引器:只有整数、片(
)、省略号(
)、numpy.newaxis(
None
)和整数或布尔数组是有效的索引。
不幸的是,我不能给出示例,因为它们是包含敏感数据的非常大的数据帧。知道会发生什么吗?对我来说,这是对整个数据帧应用None最简单的方法。这不是答案吗?
df.fillna(np.nan).replace([np.nan], [None])
df.fillna(np.nan).replace([np.nan], [None])