2015-03-31 1 views
9

jamais si souvent j'obtenir cet avertissement lors de l'analyse des fichiers de données:Quelle est une bonne stratégie pour trouver des types mixtes dans les colonnes 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) 

Mais si les données est grande (je 50k lignes), comment puis-je trouver où dans les données, le changement de DTYPE se produit?

Répondre

13

Je ne suis pas tout à fait sûr de ce que vous recherchez, mais il est assez facile de trouver les lignes qui contiennent des éléments qui ne partagent pas le type de la première rangée. Par exemple:

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

C'est exactement ce que je pensais, mais n'a pas cliqué sur l'application de la fonction intégrée 'type'. Merci! –

1

En plus de la réponse de DSM, avec une trame de données beaucoup colonne, il peut être utile de trouver les colonnes qui changent de type comme ceci:

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)