Estoy leyendo en un CSV muy grande con más de 200 columnas. Algunas de las columnas están completamente vacías. Cuando leo esto como un marco de datos, obliga a estas columnas a ser de tipo float64.

Lo obligo a ser una cadena con:

if df['OtherValidationAuthority5ValidationAuthorityEntityID'].dtype == 'float64':
    df['OtherValidationAuthority5ValidationAuthorityEntityID'] = 
        df['OtherValidationAuthority5ValidationAuthorityEntityID'].astype(str)

El problema entonces es que cuando imprimo esa columna, todos los valores son nan. Deben ser cadenas nulas, así que uso

  df['OtherValidationAuthority5ValidationAuthorityEntityID'] = 
        df['OtherValidationAuthority5ValidationAuthorityEntityID'].replace(np.nan, '', regex=True)

¡Entonces imprimo la columna y siguen siendo nans! He visto otros ejemplos en stackoverflow y PARECE que esto es lo que están recomendando. ¿Ha cambiado algo con las versiones? (Estoy usando 3.7).

¿Qué me estoy perdiendo?

Apéndice. Utilizo este código para cambiar las columnas. Funciona para algunos, pero no para otros.

for colname in df.columns:
    if df[colname].dtype == 'float64' or df[colname].dtype == 'int64':
        df[colname] = df[colname].astype(str)
    df[colname] = df[colname].replace({'nan': ''})

Cuando imprimo dtypes, todos son 'objeto', como esperaba, pero cuando imprimo los valores son

('001GPB6A9XPE8XJICC14', 'FIDELITY ADVISOR SERIES I - Fidelity Advisor Leveraged Company Stock Fund', nan, nan, nan, nan, nan, '', nan, nan, '', nan, nan, '', nan, '' , '', '', nan, nan, nan, '', '', '', '', '', '', '', '', '', '', '', '', nan , '245 SUMMER STREET', '', nan, '', nan, nan, nan, 'BOSTON', 'US-MA', 'US', '02110', nan, '245 Summer Street', '', nan, '', nan, nan, nan, 'Boston', 'US-MA', 'US', '02210', nan, nan, nan, '', '', '', nan, '', ' ', nan, nan, nan, nan,' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' , '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' , '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ' ',' ',' ',' ',' RA000665 ', nan,' S000005113 ',' US-MA ',' FUND ',' 8888 ',' OTROS ', nan, nan,' ',' ',' ACTIVE ', nan, nan, nan, nan,' ',' 2012-11-29T16: 33: 00.000Z ',' 2020-06-03T14: 33: 00.000Z ',' EMITIDO ',' 2021-05-29T07: 50: 00.000Z ',' EVK05KS7XY1DEII3R011 ',' COMPLETAMENTE_CORROBORADO ',' RA000665 ', nan,' S000005113 ',' ',' ',' ',' ' , '', '', '', '', '', '', '', '', '', '', '')

0
elbillaf 26 ago. 2020 a las 03:52

1 respuesta

La mejor respuesta

Cambiar la línea replace

df['xxxx'] = df['xxxx'].replace({'nan': ''})
1
BENY 26 ago. 2020 a las 00:53