Tengo un par de columnas de fecha, quiero convertirlas al formato de mes / día / año. Digamos que la prueba es una de las columnas de fecha; el siguiente código funciona.
dfq['test1'] = dfq['test1'].apply(lambda x: x.strftime('%m/%d/%Y'))
Pero cuando falta un valor en la columna como 'NaT', muestra el error ValueError: NaTType no admite strftime. Creé un conjunto de datos de muestra y mantuve intencionalmente un valor faltante como ''. En ese caso también muestra error.
Quiero mantener los valores faltantes o NaT, por lo que no puedo eliminarlos. ¿Hay alguna otra forma de evitarlo?
Otra pregunta, si quiero convertir todas mis columnas de fecha (por ejemplo, prueba1, prueba, prueba3) al mismo tiempo, ¿hay alguna manera de hacerlo mientras uso lambda / strftime?
Deberías usar pd.Series.dt.strftime
, que se maneja con NaT
gracia:
import pandas as pd
s = pd.Series(['2018-01-01', 'hello'])
s = pd.to_datetime(s, errors='coerce')
# 0 2018-01-01
# 1 NaT
# dtype: datetime64[ns]
s = s.dt.strftime('%m/%d/%Y')
print(s)
# 0 01/01/2018
# 1 NaT
# dtype: object
Para su segunda pregunta, no creo datetime
que la str
conversión pueda vectorizarse. Puedes hacer esto fácilmente:
for col in ['col1', 'col2', 'col3']:
df[col] = df[col].dt.strftime('%m/%d/%Y')
O mejor:
for col in df.select_dtypes(include=['datetime']):
df[col] = df[col].dt.strftime('%m/%d/%Y')
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras