gpt4 book ai didi

python - pandas pivot 改变 dtype

转载 作者:行者123 更新时间:2023-11-28 17:12:10 25 4
gpt4 key购买 nike

用 pandas pivot_table 创建一个新的 dataframe 后,数据类型从 int32 变为 float

原始数据框

df = pd.DataFrame.from_dict(my_dict, orient='columns', dtype='i4')
print(df.head(11))

输出:

         clock   eventid         ns  objectid  value
0 1505960158 62704261 327504323 32219 1
1 1505962773 62711138 22192905 32219 0
2 1505400465 61216428 123915259 32233 1
3 1504642494 59208977 369082011 32254 1
4 1504643325 59210478 576875730 32254 0
5 1504642494 59208978 369082011 32260 1
6 1504643325 59210479 576875730 32260 0
7 1504224224 58101461 445846619 13479 0
8 1504258784 58187457 204908064 13479 1
9 1504310624 58318750 443786274 13479 0
10 1504517992 58886060 746243067 13479 1

print(df.dtypes)

输出:

clock       int32
eventid int32
ns int32
objectid int32
value int32
dtype: object

当我使用 pivot_table 时

p = df.reset_index().pivot_table(index="objectid", columns="value", values="clock", fill_value=0).iloc[:, ::-1]
print(p)

输出:

value              1             0
objectid
13479 1505534184 1.505467e+09
13485 1505676014 1.505677e+09
32219 1505960158 1.505963e+09
32233 1505400465 0.000000e+00
32254 1504642494 1.504643e+09
32260 1504642494 1.504643e+09
print(p.dtypes)

输出:

value
1 int64
0 float64
dtype: object

为什么 0 列变成 float 的?如何避免这种情况?

最佳答案

您的示例数据可能不会显示它,但您的数据透视操作的结果可能包含 NaN,它们是 float 类型,因此该列的其余部分是也由 pandas 自动转换为 float 以进行高效计算。请注意,NaN 由零填充 (fill_value=0),因此您看不到它们。

例如,没有包含 objectid = 32233value = 0 的行,因此数据透视结果中的相应条目显示为 NaN,然后用 0 填充。

既然清楚了列向上转换的原因,您可以使用 astype 重置数据类型:

p = p.astype(int)

关于python - pandas pivot 改变 dtype,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46859400/

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