熊猫:nan->无

问题描述 投票:0回答:3

pandas.DataFrame.to_dict
nan
转换为
nan
,并将
null
转换为
None
。正如 Python 比较忽略 nan 中所解释的,这有时不是最佳的。

有没有办法将所有

nan
转换为
None
? (在
pandas
或稍后在 Python 中)

例如,

>>> df = pd.DataFrame({"a":[1,None],"b":[None,"foo"]})
>>> df
     a     b
0  1.0  None
1  NaN   foo
>>> df.to_dict()
{'a': {0: 1.0, 1: nan}, 'b': {0: None, 1: 'foo'}}

我想要

{'a': {0: 1.0, 1: None}, 'b': {0: None, 1: 'foo'}}

相反。

python python-2.7 pandas nan
3个回答
10
投票
import pandas as pd

df = pd.DataFrame({"a":[1,None],"b":[None,"foo"]})
df.where((pd.notnull(df)), None)
Out[850]: 
      a     b
0     1  None
1  None   foo
df.where((pd.notnull(df)), None).to_dict()
Out[851]: {'a': {0: 1.0, 1: None}, 'b': {0: None, 1: 'foo'}}

3
投票

初始化为对象 DataFrame(后果自负...):

df = pd.DataFrame({"a":[1,None],"b":[None,"foo"]}, dtype=object)    
df

      a     b
0     1  None
1  None   foo

在第一列中,pandas 尝试推断 dtype,并猜测为 float。您可以通过强制其保持

object
从而完全抑制任何类型的转换来防止这种情况。


0
投票

我发现接受的答案不起作用,但这确实有效:

df.replace([np.nan], [None]).to_dict('records')

我不知道为什么。我至少可以说,df 中似乎有 na 值的所有字段确实通过使用

df.isna()
检查它们来进行了验证。

我从这里得到了解决方案。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.