¿Cuál es una buena estrategia para encontrar tipos mixtos en las columnas de Pandas?

Muy a menudo recibo esta advertencia al analizar archivos de datos:

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) 

Pero si los datos son grandes (tengo 50k filas), ¿cómo puedo encontrar DÓNDE en los datos se produce el cambio de dtype?

No estoy completamente seguro de lo que está buscando, pero es bastante fácil encontrar las filas que contienen elementos que no comparten el tipo de la primera fila. Por ejemplo:

 >>> 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] AB 321 Fred 321 325 325 True 

Además de la respuesta de DSM, con un dataframe de varias columnas puede ser útil encontrar las columnas que cambian de tipo de la siguiente manera:

 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)