pandas.to_dict返回None与nan混合

时间:2017-04-06 12:03:07

标签: python-3.x pandas

我偶然发现了大熊猫的一个小问题及其方法to_dict。 我有一张桌子,我确定每排都有相同数量的相同列,让我们说它看起来像这样:

+----|----|----+
|COL1|COL2|COL3|
+----|----|----+
|VAL1|    |VAL3|
|    |VAL2|VAL3|
|VAL1|VAL2|    |
+----|----|----+

当我df.to_dict(orient='records')时,我得到:

[{
     "COL1":"VAL1"
     ,"COL2":nan
     ,"COL3":"VAL3"
 }
 ,{
     "COL1":None
     ,"COL2":"VAL2"
     ,"COL3":"VAL3"
 }
 ,{
     "COL1":"VAL1"
     ,"COL2":"VAL2"
     ,"COL3":nan
}]

请注意某些列中的nan和其他列中的None(始终相同,似乎没有nan和{{1}在同一栏中)

当我None时,我只获得json.loads(df.to_json(orient='records'))而没有None' s(这是所需的输出)。

像这样:

nan

我会很感激为什么会发生以及是否可以某种方式加以控制。

== EDIT ==

根据评论,最好先用[{ "COL1":"VAL1" ,"COL2":None ,"COL3":"VAL3" } ,{ "COL1":None ,"COL2":"VAL2" ,"COL3":"VAL3" } ,{ "COL1":"VAL1" ,"COL2":"VAL2" ,"COL3":None }] 替换nanNone,但那些nan不是np.nan&#39} >>> a = df.head().ix[0,60] >>> a nan >>> type(a) <class 'numpy.float64'> >>> a is np.nan False >>> a == np.nan False

Func<T, bool>

1 个答案:

答案 0 :(得分:6)

我认为你只能replaceto_dict无法控制:

L = [{
     "COL1":"VAL1"
     ,"COL2":np.nan
     ,"COL3":"VAL3"
 }
 ,{
     "COL1":None
     ,"COL2":"VAL2"
     ,"COL3":"VAL3"
 }
 ,{
     "COL1":"VAL1"
     ,"COL2":"VAL2"
     ,"COL3":np.nan
}]

df = pd.DataFrame(L).replace({np.nan:None})
print (df)
   COL1  COL2  COL3
0  VAL1  None  VAL3
1  None  VAL2  VAL3
2  VAL1  VAL2  None

print (df.to_dict(orient='records'))
[{'COL3': 'VAL3', 'COL2': None, 'COL1': 'VAL1'}, 
 {'COL3': 'VAL3', 'COL2': 'VAL2', 'COL1': None}, 
 {'COL3': None, 'COL2': 'VAL2', 'COL1': 'VAL1'}]