2015-05-13 24 views
20

Utwórz kolumnę dzień-of-tydzień w dataframe pandy użyciu PythonaUtwórz kolumnę dzień-of-tydzień w dataframe pandy używając Python

chciałbym do odczytu pliku csv do dataframe pandy, analizowania kolumnę dat z formatu ciągu znaków do obiektu daty, a następnie wygeneruj nową kolumnę wskazującą dzień tygodnia.

To co usiłuję:

Co chciałbym zrobić coś takiego jak:

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' 

Dziękuję za pomoc. James

+1

Czy chcąc dzień całkowitą tygodnia lub nazwy strun? dla poprzedniej 'df ['date']. dt.dayofweek' będzie działać – EdChum

+0

Liczba całkowita. I dzięki za komentarz do formatowania. –

+0

Istnieje również "dt.weekday", który jest taki sam jak "dayofweek", ale 2 znaki krótsze, aby wpisać – EdChum

Odpowiedz

41

EDIT:

Jak jezrael użytkownik zaznacza poniżej dt.weekday_name został dodany w wersji 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 

wyjściowa:

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

Original odpowiedzi :

Użyj tego:

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

Zobacz to:

Get weekday/day-of-week for Datetime column of DataFrame

Jeśli chcesz ciąg zamiast liczby całkowitej zrobić coś takiego:

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

Output :

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

Liam, zaimportowałem datetime moduł jako dt, ale otrzymuję ten nowy błąd. Czy wiesz, co się dzieje? Dzięki jeszcze raz! 'df [ 'DAY_OF_WEEK'] = df [ ''] my_dates dt.dayofweek' AttributeError. Przedmiot 'seria' ma atrybut 'dt' –

+1

Po uruchomieniu' df.dtypes' dostajesz 'my_dates datetime64 [ns] '? –

+0

Tak, otrzymuję = datetime64 [ns] dla mojej kolumny daty. –

5

W wersji 0.18.1 dodaje 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 

Innym rozwiązaniem z 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 
Powiązane problemy