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] (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |