web-dev-qa-db-fra.com

Créez une colonne du jour de la semaine dans un Pandas dataframe en utilisant Python

Créez une colonne du jour de la semaine dans un dataframe Pandas en utilisant Python

J'aimerais lire un fichier csv dans un fichier de données pandas), analyser une colonne de dates du format de chaîne en un objet de date, puis générer une nouvelle colonne indiquant le jour de la semaine.

C’est ce que j’essaie:

Ce que je voudrais faire est quelque chose comme:

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'

Merci de votre aide. James

40
James Eaves

Pandas 0.23+

Utilisez pandas.Series.dt.day_name() , puisque pandas.Timestamp.weekday_name est obsolète:

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()

Sortie:

    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+

Comme l'utilisateur Jezrael le souligne ci-dessous, dt.weekday_name a été ajouté à la version 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

Sortie:

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

Réponse originale:

Utilisez ceci:

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

Regarde ça:

Récupère le jour de la semaine/jour de la semaine pour la colonne Datetime de DataFrame

Si vous voulez une chaîne au lieu d'un entier, procédez comme suit:

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])

Sortie:

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

En version 0.18.1 est ajouté 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

Une autre solution avec 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
12
jezrael

Utiliser dt.weekday_name Est obsolète depuis pandas 0.23.0 , utilisez plutôt 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
3
user3483203
df =df['Date'].dt.dayofweek

dayofweek est au format numérique

2
Catruc Iurie