gpt4 book ai didi

python - 使用 DataFrame.to_dict 时 dtype 发生变化

转载 作者:太空狗 更新时间:2023-10-30 01:54:05 47 4
gpt4 key购买 nike

我的 DataFrame 中有一个 uint64 列,但是当我使用 DataFrame.to_dict('record') 将该 DataFrame 转换为 python 字典列表时,之前的内容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,
1: 6957860914294,
2: 7219009614965,
...

最佳答案

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

如果你想绕过这个错误,你可以明确地将你的数据帧转换为 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]

关于python - 使用 DataFrame.to_dict 时 dtype 发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31374928/

47 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com