2017-10-21 92 views
1

创建与熊猫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 

为什么列成为浮动?如何避免这种情况?

回答

1

你的样本数据可能不会表现出来,但你转动操作的结果可能包含NaN s,这是float型的,所以列的其余部分也自动熊猫高效计算upcasted到float。请注意,NaN由零填充(fill_value=0),所以您不会看到它们。

例如,有一个与objectid = 32233value = 0没有行,使相应的在数据透视结果条目NaN,然后把它装满0显示出来。现在

,它的清楚为什么列upcasted,您可以重新使用astype数据类型:

p = p.astype(int) 
+0

没有“男”。 DF数据帧有133行,但P数据帧只有6.我将编辑我的问题。 –

+0

@JoaoVitorino做'df.isnull()。any()',看看输出结果如何。你的一个结果有一个“0.0000000e + 00”,所以这只是一个指示。 –

+0

df.isnull()。any()对所有列返回false –