我uint64在我的DataFrame中有一个列,但是当我将该DataFrame转换为python dict的列表时DataFrame.to_dict('record'),以前的内容uint64会被神奇地转换为float:
In [24]: mid['bd_id'].head()
Out[24]:
0 0
1 6957860914294
2 7219009614965
3 7602051814214
4 7916807114255
Name: bd_id, dtype: uint64
In [25]: mid.to_dict('record')[2]['bd_id']
Out[25]: 7219009614965.0
In [26]: bd = mid['bd_id']
In [27]: bd.head().to_dict()
Out[27]: {0: 0, 1: 6957860914294, 2: 7219009614965, 3: 7602051814214, 4: 7916807114255}
Run Code Online (Sandbox Code Playgroud)
我该如何避免这种奇怪的行为?
奇怪的是,如果我使用to_dict()而不是to_dict('records'),bd_id列将是int类型:
In [43]: mid.to_dict()['bd_id']
Out[43]:
{0: 0,
1: 6957860914294,
2: 7219009614965,
...
Run Code Online (Sandbox Code Playgroud)
max*_*moo 10
这是因为另一列中有一个浮点数.更具体地说to_dict('records'),使用values数据框的属性而不是列本身来实现,这实现了"隐式向上转换",在您将uint64转换为float的情况下.
如果您想解决此错误,可以将数据帧明确地转换为object数据类型:
df.astype(object).to_dict('record')[2]['bd_id']
Out[96]: 7602051814214
Run Code Online (Sandbox Code Playgroud)
顺便说一下,如果您正在使用IPython并且想要查看函数在库中的实现方式,那么可以通过放置??方法调用结束来使其变为现实.对于pd.DataFrame.to_dict??我们看到
...
elif orient.lower().startswith('r'):
return [dict((k, v) for k, v in zip(self.columns, row))
for row in self.values]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3087 次 |
| 最近记录: |