Eu tenho um quadro de dados do Pandas, uma das colunas contém strings de data no formato YYYY-MM-DD
Por exemplo '2013-10-28'
No momento em que o dtype
da coluna é object
.
Como faço para converter os valores da coluna para o formato de data do Pandas?
df['time'] = [time.date() for time in df['time']]
Essencialmente equivalente a @waitingkuo, mas eu usaria
to_datetime
aqui (parece um pouco mais limpo e oferece algumas funcionalidades adicionais, por exemplodayfirst
):Lidando com
ValueError
sSe você se deparar com uma situação em que fazer
Joga um
Isso significa que você tem valores inválidos (não coercíveis). Se concordar com a conversão deles para
pd.NaT
, você pode adicionar umerrors='coerce'
argumento parato_datetime
:fonte
Imagino que muitos dados entrem no Pandas a partir de arquivos CSV; nesse caso, você pode simplesmente converter a data durante a leitura inicial do CSV:
dfcsv = pd.read_csv('xyz.csv', parse_dates=[0])
onde o 0 se refere à coluna em que a data está.Você também pode adicionar
, index_col=0
lá se quiser que a data seja o seu índice.Veja https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html
fonte
Agora você pode fazer
df['column'].dt.date
Observe que, para objetos datetime, se você não vir a hora em que são todos 00:00:00, isso não é pandas. Esse é o notebook iPython tentando fazer as coisas parecerem bonitas.
fonte
df[col] = pd.to_datetime(df[col])
primeiro para converter sua coluna em objetos de data e hora.dtype = object
que ocupa muito mais memória do que uma coluna verdadeiradatetime dtype
em pandas.Outra maneira de fazer isso funciona bem se você tiver várias colunas para converter em data e hora.
fonte
date
apenas valores em suas colunas, a conversão para data e hora reterá apenas as informações pertinentes. Se você converter explicitamente usandodf['datetime_col'].dt.date
isso resultará em umobject
dtype; perda no gerenciamento de memória.Se você deseja obter o formato DATE e não DATETIME:
fonte
Pode ser que as datas precisem ser convertidas para uma frequência diferente. Nesse caso, sugiro definir um índice por datas.
Depois disso, você pode converter mais facilmente para o tipo de formato de data de que mais precisa. Abaixo, eu converto sequencialmente para vários formatos de data, terminando com um conjunto de datas diárias no início do mês.
Para resumir, não mostro que executo o código a seguir após cada linha acima:
Isso me dá a seguinte saída:
fonte
Tente converter uma das linhas em carimbo de data / hora usando a função pd.to_datetime e, em seguida, use .map para mapear o formulário para a coluna inteira
fonte
fonte
Para ser mais completo, outra opção, que pode não ser a mais direta, um pouco semelhante à proposta por @SSS, mas usando a biblioteca datetime é:
fonte