2013-07-01 8 views
5

C'è qualche ragione per cui i Panda cambiano il tipo di colonne da int a float in aggiornamento, e posso impedirgli di farlo? Ecco qualche esempio di codice del problemaconversione di tipo indesiderato in pandas.DataFrame.update

import pandas as pd 
import numpy as np 

df = pd.DataFrame({'int': [1, 2], 'float': [np.nan, np.nan]}) 

print('Integer column:') 
print(df['int']) 

for _, df_sub in df.groupby('int'): 
    df_sub['float'] = float(df_sub['int']) 
    df.update(df_sub) 

print('NO integer column:') 
print(df['int']) 
+0

questo bug (un po 'non banale da risolvere però): https://github.com/pydata/pandas/issues/4094 – Jeff

+0

puoi ovviamente sempre '' df [' int ']. Astype (int) '' – Jeff

risposta

3

Ecco la ragione di questo: dal momento che si sta effettivamente mascherare certi valori su una colonna e sostituirli (con aggiornamenti), alcuni valori potrebbero diventare `nan

in un array intero questo è impossibile, quindi i dtype numerici vengono convertiti in float (per l'efficienza), in quanto il primo controllo è più costoso che fare questo

un cambio di dtype back è possibile ... solo non nel codice adesso , quindi un bug (un po 'non banale da risolvere però): github.com/pydata/pandas/issues/40 94

+0

thx per la risposta! – Joerg