环境
- Python 3.9.6
- 数字1.21.0
- 熊猫1.3.1
我想做什么
用None
替换数据帧中的所有NaN
值
我现在拥有的
In[6]: import pandas as pd
In[7]: import numpy as np
In[8]: df = pd.DataFrame({"a":[1,np.nan],"b":[np.nan,"foo"]})
In[9]: df
Out[9]:
a b
0 1.0 NaN
1 NaN foo
In[10]: pd.notnull(df)
Out[10]:
a b
0 True False
1 False True
In[11]: df.where(pd.notnull(df), None)
Out[11]:
a b
0 1.0 None
1 NaN foo
预期输出
In[11]: df.where(pd.notnull(df), None)
Out[11]:
a b
0 1.0 None
1 None foo
我已经在另一台使用Python 3.8.5和pandas==1.1.1的机器上测试了这一点,它如预期的那样工作。这是个虫子吗?
谢谢!
这不是一个bug。事实上,您在pandas==1.1.1
中看到的结果是一个错误,PR39761在以后的版本中已经修复了这个错误。
1.3.0发行说明中也提到了该修复程序。
通常,pandas
会尝试强制转换以避免包含object
dtype列的结果,这也不例外。如果你想强制铸造,你可以使用:
>>> df.astype(object).where(pd.notnull(df), None)
a b
0 1.0 None
1 None foo
社区中似乎对这个bug修复有一些抱怨,在这里进行了讨论。