Aquí está el trato

Estoy recuperando datos de una colección de MongoDB no coherente, por lo que quiero eliminar filas donde el índice no es un tipo de fecha y hora .

P.ej. eliminando las primeras 5 filas de este DataFrame:

                                               _id  id  ... open connected
updated                                                 ...               
Timestamp(0, 1610620202)  60001de14ed34a02743c4547  27  ...    1         1
1610620382                60001de14ed34a02743c4548   5  ...    1         1
1610620202                60001de14ed34a02743c4549  24  ...    1         1
1610620382                60001de14ed34a02743c454a  17  ...    1         1
1610620201                60001de14ed34a02743c454b   1  ...    1         1
...                                            ...  ..  ...  ...       ...
2021-01-14 20:12:01       6000a60cc299a51c09e20626  19  ...    1         1
2021-01-14 20:12:01       6000a60cc299a51c09e20627  21  ...    1         1
2021-01-14 20:12:01       6000a60cc299a51c09e20628  11  ...    1         1
2021-01-14 20:12:01       6000a60cc299a51c09e20629  16  ...    1         1
2021-01-14 20:12:01       6000a60cc299a51c09e2062a  14  ...    1         1

Además, ¿cómo puedo encontrar el tipo preciso que se utiliza en una celda determinada? Gracias.

0
Sowdowdow 14 ene. 2021 a las 23:22

2 respuestas

La mejor respuesta

Convierta la columna a fecha y hora y use errors='coerce' para marcar tipos que no sean de fecha y hora en NaT y luego puede filtrar las filas que no son nulas

df[~pd.to_datetime(df.index, errors='coerce').isnull()]

                                       _id      id
updated     
2021-01-14 20:12:01 6000a60cc299a51c09e20626    19
2021-01-14 20:12:01 6000a60cc299a51c09e20627    21
2021-01-14 20:12:01 6000a60cc299a51c09e20628    11
2021-01-14 20:12:01 6000a60cc299a51c09e20629    16
2021-01-14 20:12:01 6000a60cc299a51c09e2062a    14

Para conocer el tipo de datos de toda la columna, puede hacer

df['_id'].apply(type)

En caso de índice, puede hacer

pd.Series(df.index.values).apply(type)
1
ggaurav 14 ene. 2021 a las 20:37

Creemos un pequeño ejemplo con un rango de índice y un rango de fechas:

df = pd.DataFrame({'a':[1,2,3]})
df2 = pd.DataFrame({'a':[4,5,6]}, index=pd.date_range('2020-01-01', '2020-01-03', freq='D'))
df_select = df.append(df2)

>>> df_select 
                     a
0                    1
1                    2
2                    3
2020-01-01 00:00:00  4
2020-01-02 00:00:00  5
2020-01-03 00:00:00  6

Ahora puede seleccionar usando información de tipo como esta:

df_select[[isinstance(item, pd.Timestamp) for item in df_select.index.values]]
>>>
                     a
2020-01-01 00:00:00  4
2020-01-02 00:00:00  5
2020-01-03 00:00:00  6

Espero que esta sea una solución para su problema.

0
mosc9575 14 ene. 2021 a las 20:42
65726354