2016-07-18 87 views
7

Ecco il mio codice:Come impedire a Pandas di convertire i miei numeri interi in float quando unisco due dataFrames?

import pandas as pd 
left = pd.DataFrame({'AID': [1, 2, 3, 4], 
         'D': [2011, 2011,0, 2011], 
         'R1': [0, 1, 0, 0], 
         'R2': [1, 0, 0, 0] }) 

right = pd.DataFrame({'AID': [1, 2, 3, 4], 
         'D': [2012, 0,0, 2012], 
         'R1': [0, 1, 0, 0], 
         'R2': [1, 0, 0, 0] }) 

result = left.merge(right, how = 'outer') 

Quando stampo il mio risultato dataframe, i valori interi sono ora galleggia:

AID  D R1 R2 
0 1.0 2011.0 0.0 1.0 
1 2.0 2011.0 1.0 0.0 
2 3.0  0.0 0.0 0.0 
3 4.0 2011.0 0.0 0.0 
4 1.0 2012.0 0.0 1.0 
5 2.0  0.0 1.0 0.0 
6 4.0 2012.0 0.0 0.0 

Come posso evitare questo?

+0

Eventuali duplicati di http://stackoverflow.com/questions/21291259/convert-floats-to-ints-in-pandas – Alec

+6

A quanto pare questo è un bug e verrà fissato in 0,18. 2 https://github.com/pydata/pandas/issues/8596 – ayhan

+1

@ayhan puoi votare per chiudere per favore. Questo non è più riproducibile. TY – piRSquared

risposta

-1

avrei monitorare quello che il dtypes erano per left e right

dtypes = left.dtypes.combine_first(right.dtypes) 

Poi mi piacerebbe ricostruire results conseguenza.

results = pd.DataFrame({k: v.astype(dtypes.loc[k]) for k, v in results.iteritems()}) 
results 

enter image description here

+0

La conversione da float a int ini può portare a una perdita di precisione, specialmente quando i valori originali erano abbastanza grandi. –