加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 使用DataFrame.to_dict时dtype更改

发布时间:2020-12-20 12:08:33 所属栏目:Python 来源:网络整理
导读:我的DataFrame中有一个uint64列,但是当我使用DataFrame.to_dict(‘record’)将该DataFrame转换为 python dict列表时,之前uint64被神奇地转换为float: In [24]: mid['bd_id'].head()Out[24]:0 01 69578609142942 72190096149653 76020518142144 791680711425
我的DataFrame中有一个uint64列,但是当我使用DataFrame.to_dict(‘record’)将该DataFrame转换为 python dict列表时,之前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}

我该如何避免这种奇怪的行为?

更新

奇怪的是,如果我使用to_dict()而不是to_dict(‘records’),bd_id列将是int类型:

In [43]: mid.to_dict()['bd_id']
Out[43]:
{0: 0,...

解决方法

这是因为另一列中有一个浮点数.更具体地说,to_dict(‘records’)是使用数据框的values属性而不是列本身实现的,这实现了“隐式向上转换”,在你的情况下将uint64转换为float.

如果你想解决这个bug,你可以显式地将数据帧转换为object数据类型:

df.astype(object).to_dict('record')[2]['bd_id']
Out[96]: 7602051814214

顺便说一下,如果你正在使用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]

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读