gpt4 book ai didi

python - Pandas 为什么我的列数据类型会改变?

转载 作者:行者123 更新时间:2023-12-01 03:16:07 26 4
gpt4 key购买 nike

请有人解释一下为什么当我用 pandas 创建一个简单的异构数据框时,当我单独访问每一行时数据类型会发生变化。

例如

scene_df = pd.DataFrame({
'magnitude': np.random.uniform(0.1, 0.3, (10,)),
'x-center': np.random.uniform(-1, 1, (10,)),
'y-center': np.random.uniform(-1, 1, (10,)),
'label': np.random.randint(2, size=(10,), dtype='u1')})

scene_df.dtypes

打印:

label          uint8
magnitude float64
x-center float64
y-center float64
dtype: object

但是当我迭代行时:

[r['label'].dtype for i, r in scene_df.iterrows()]

我得到 float64 标签

[dtype('float64'),
dtype('float64'),
dtype('float64'),
dtype('float64'),
dtype('float64'),
...

编辑:

回答我打算用这个做什么:

def square(mag, x, y):
wh = np.array([mag, mag])
pos = np.array((x, y)) - wh/2
return plt.Rectangle(pos, *wh)

def circle(mag, x, y):
return plt.Circle((x, y), mag)

shape_fn_lookup = [square, circle]

最终变成了这段丑陋的代码:

[shape_fn_lookup[int(s['label'])](
*s[['magnitude', 'x-center', 'y-center']])
for i, s in scene_df.iterrows()]

这给出了我可以绘制的一堆圆形和正方形:

[<matplotlib.patches.Circle at 0x7fcf3ea00d30>,
<matplotlib.patches.Circle at 0x7fcf3ea00f60>,
<matplotlib.patches.Rectangle at 0x7fcf3eb4da90>,
<matplotlib.patches.Circle at 0x7fcf3eb4d908>,
...
]

甚至 DataFrame.to_dict('records') 也会进行此数据类型转换:

type(scene_df.to_dict('records')[0]['label'])

最佳答案

我建议使用 itertuples 而不是 interrows,因为 iterrows 为每行返回一个 Series,它不会保留跨行的 dtypes(dtypes 跨 DataFrame 的列保留)。

[type(r.label) for r in scene_df.itertuples()]

输出:

[numpy.uint8,
numpy.uint8,
numpy.uint8,
numpy.uint8,
numpy.uint8,
numpy.uint8,
numpy.uint8,
numpy.uint8,
numpy.uint8,
numpy.uint8]

关于python - Pandas 为什么我的列数据类型会改变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42455958/

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