大熊猫枢轴变化DTYPE
问题描述:
创建与熊猫pivot_table一个新数据帧之后,从INT32的D型细胞改变为浮动大熊猫枢轴变化DTYPE
原始数据帧
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
WHE我用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
为什么列成为浮动?如何避免这种情况?
答
你的样本数据可能不会表现出来,但你转动操作的结果可能包含NaN
s,这是float
型的,所以列的其余部分也自动熊猫高效计算upcasted到float
。请注意,NaN
由零填充(fill_value=0
),所以您不会看到它们。
例如,有一个与objectid = 32233
和value = 0
没有行,使相应的在数据透视结果条目NaN
,然后把它装满0
显示出来。现在
,它的清楚为什么列upcasted,您可以重新使用astype
数据类型:
p = p.astype(int)
没有“男”。 DF数据帧有133行,但P数据帧只有6.我将编辑我的问题。 –
@JoaoVitorino做'df.isnull()。any()',看看输出结果如何。你的一个结果有一个“0.0000000e + 00”,所以这只是一个指示。 –
df.isnull()。any()对所有列返回false –