2016-07-18 4 views
7

Hier ist mein Code:Wie kann ich verhindern, dass Pandas meine Integer in Floats umwandelt, wenn ich zwei dataFrames zusammenführe?

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') 

Als ich mein Ergebnis Datenrahmen drucken, schwimmt die ganzzahligen Werte sind jetzt:

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 

Wie kann ich das verhindern?

+0

Mögliche Duplikat http://stackoverflow.com/questions/21291259/convert-floats-to-ints-in-pandas – Alec

+6

Offensichtlich ist dies ein Fehler und wird in 0,18 festgelegt werden. 2 https://github.com/pydata/pandas/issues/8596 – ayhan

+1

@ayhan können Sie bitte stimmen, um zu schließen. Dies ist nicht mehr reproduzierbar. TY – piRSquared

Antwort

-1

Ich würde verfolgen, was die dtypes für left waren und right

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

Dann würde ich results entsprechend rekonstruieren.

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

enter image description here

+0

Das Umsetzen von Floats auf Ints kann zu Präzisionsverlusten führen, insbesondere wenn die ursprünglichen Werte groß genug waren. –

Verwandte Themen