2017-10-21 3 views
1

후 팬더 pivot_table 가진 새로운 dataframe를 생성 D- 타입팬더 피벗 변화는 INT32에서 DTYPE 변경 부유

원래 dataframe

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 열이 될 플로트? 이것을 피하는 방법?

답변

1

샘플 데이터는 표시되지 않을 수 있지만, 칼럼의 나머지는 자동으로 효율적인 계산을위한 팬더에 의해 float에 upcasted되도록 피봇 동작의 결과는 아마도 float 유형입니다 NaN의가 포함되어 있습니다. NaN은 0으로 채워 지므로 보이지 않게됩니다 (fill_value=0). 피벗 결과에 대응하는 엔트리를 다음 0 가득 얻는다 NaN로 표시되도록

는 예를 들어, objectid = 32233value = 0 아무런 행 없다.

p = p.astype(int) 
+0

더 'NaN이'없다 :

이제 열이 upcasted 이유는 분명, 당신은 astype를 사용하여 데이터 유형을 재설정 할 수 있습니다. df 데이터 프레임에는 133 행이 있지만 p 데이터 프레임에는 6 개만 있습니다. 내 질문을 편집합니다. –

+0

@ JoaoVitorino'df.isnull(). any()'를 수행하고 그 결과를 확인하십시오. 귀하의 결과 중 하나는 '0.0000000e + 00'을 가지므로 그게 다소 도움이됩니다. –

+0

df.isnull() any()는 모든 열에 대해 false를 반환합니다. –