2015-03-31 6 views
9

Ogni tanto ricevo questo avvertimento durante l'analisi dei file di dati:Qual è una buona strategia per trovare i tipi misti nelle colonne di Pandas?

WARNING:py.warnings:/usr/local/python3/miniconda/lib/python3.4/site- 
packages/pandas-0.16.0_12_gdcc7431-py3.4-linux-x86_64.egg/pandas 
/io/parsers.py:1164: DtypeWarning: Columns (0,2,14,20) have mixed types. 
Specify dtype option on import or set low_memory=False. 
      data = self._reader.read(nrows) 

Ma se i dati sono di grandi dimensioni (ho 50k righe), come posso trovare dove nei dati avviene il cambio di DTYPE?

risposta

13

Non sono del tutto sicuro di cosa si sta cercando, ma è abbastanza facile trovare le righe che contengono elementi che non condividono il tipo della prima riga. Per esempio:

>>> df = pd.DataFrame({"A": np.arange(500), "B": np.arange(500.0)}) 
>>> df.loc[321, "A"] = "Fred" 
>>> df.loc[325, "B"] = True 
>>> weird = (df.applymap(type) != df.iloc[0].apply(type)).any(axis=1) 
>>> df[weird] 
     A  B 
321 Fred 321 
325 325 True 
+0

Questo è esattamente quello che stavo pensando, ma non ho fatto clic su semplicemente applicando la funzione built-in 'type'. Grazie! –

1

Oltre alla risposta di DSM, con un dataframe molti colonne può essere utile per trovare le colonne che cambiano tipo in questo modo:

for col in df.columns: 
    weird = (df[[col]].applymap(type) != df[[col]].iloc[0].apply(type)).any(axis=1) 
    if len(df[weird]) > 0: 
     print(col) 
Problemi correlati