Cree una columna del día de la semana en un dataframe de Pandas usando Python

Cree una columna del día de la semana en un dataframe de Pandas usando Python

Me gustaría leer un archivo csv en un dataframe de pandas, analizar una columna de fechas de formato de cadena a un objeto de fecha y luego generar una nueva columna que indique el día de la semana.

Esto es lo que estoy intentando:

Lo que me gustaría hacer es algo como:

import pandas as pd import csv df = pd.read_csv('data.csv', parse_dates=['date'])) df['day-of-week'] = df['date'].weekday() AttributeError: 'Series' object has no attribute 'weekday' 

Gracias por tu ayuda. James

Pandas 0.23+

Utilice pandas.Series.dt.day_name() , ya que pandas.Timestamp.weekday_name ha quedado en desuso:

 import pandas as pd df = pd.DataFrame({'my_dates':['2015-01-01','2015-01-02','2015-01-03'],'myvals':[1,2,3]}) df['my_dates'] = pd.to_datetime(df['my_dates']) df['day_of_week'] = df['my_dates'].dt.day_name() 

Salida:

  my_dates myvals day_of_week 0 2015-01-01 1 Thursday 1 2015-01-02 2 Friday 2 2015-01-03 3 Saturday 

Pandas 0.18.1+

Como el usuario jezrael señala a continuación, se agregó dt.weekday_name en la versión 0.18.1 Pandas Docs

 import pandas as pd df = pd.DataFrame({'my_dates':['2015-01-01','2015-01-02','2015-01-03'],'myvals':[1,2,3]}) df['my_dates'] = pd.to_datetime(df['my_dates']) df['day_of_week'] = df['my_dates'].dt.weekday_name 

Salida:

  my_dates myvals day_of_week 0 2015-01-01 1 Thursday 1 2015-01-02 2 Friday 2 2015-01-03 3 Saturday 

Respuesta original:

Utilizar esta:

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.dt.dayofweek.html

Mira esto:

Obtenga el día de la semana / día de la semana para la columna Datetime de DataFrame

Si quieres una cadena en lugar de un entero, haz algo como esto:

 import pandas as pd df = pd.DataFrame({'my_dates':['2015-01-01','2015-01-02','2015-01-03'],'myvals':[1,2,3]}) df['my_dates'] = pd.to_datetime(df['my_dates']) df['day_of_week'] = df['my_dates'].dt.dayofweek days = {0:'Mon',1:'Tues',2:'Weds',3:'Thurs',4:'Fri',5:'Sat',6:'Sun'} df['day_of_week'] = df['day_of_week'].apply(lambda x: days[x]) 

Salida:

  my_dates myvals day_of_week 0 2015-01-01 1 Thurs 1 2015-01-02 2 Fri 2 2015-01-01 3 Thurs 

En la versión 0.18.1 se agrega dt.weekday_name :

 print df my_dates myvals 0 2015-01-01 1 1 2015-01-02 2 2 2015-01-03 3 print df.dtypes my_dates datetime64[ns] myvals int64 dtype: object df['day_of_week'] = df['my_dates'].dt.weekday_name print df my_dates myvals day_of_week 0 2015-01-01 1 Thursday 1 2015-01-02 2 Friday 2 2015-01-03 3 Saturday 

Otra solución con assign :

 print df.assign(day_of_week = df['my_dates'].dt.weekday_name) my_dates myvals day_of_week 0 2015-01-01 1 Thursday 1 2015-01-02 2 Friday 2 2015-01-03 3 Saturday 

El uso de dt.weekday_name está en desuso desde pandas 0.23.0 , en su lugar, use dt.day_name() :

 df = pd.DataFrame({'my_dates':['2015-01-01','2015-01-02','2015-01-03'],'myvals':[1,2,3]}) df['my_dates'] = pd.to_datetime(df['my_dates']) df['my_dates'].dt.day_name() 0 Thursday 1 Friday 2 Saturday Name: my_dates, dtype: object 
 df =df['Date'].dt.dayofweek 

dayofweek está en formato numérico