2016-06-08 82 views
2

有一個熊貓據幀DF,爲了從日期列獲取星期,我所做的:Python的日期時間平日的strftime()與平日()

df_raw['DayOfWeek'] = df_raw[str_date_colname].dt.strftime('%w') 

它返回平日的十進制數,其中0星期日和6是星期六。不過,我想得到0是星期一,6是星期天。所以我做:

df_raw['DayOfWeek'] = df_raw[str_date_colname].dt.weekday() 

但它返回:'Series' object is not callable

能告訴我爲什麼?我認爲無論是strftime()weekday()在datetime對象是可調用:https://docs.python.org/2/library/datetime.html

+0

您可以打印df_raw [str_date_colname] .dt的值和類型嗎? –

+0

@Shpionus它是 Kevin

回答

2

如果df是熊貓數據框,然後df['date']是一個系列。如果df['date']包含日期時間(特別是,如果dtype是datetime64[ns] s),則該系列將具有.dt accessor

In [12]: type(df['date']) 
Out[12]: pandas.core.series.Series 

In [13]: type(df['date'].dt) 
Out[13]: pandas.tseries.common.DatetimeProperties 

通過df['date'].dt返回的DatetimeProperties對象具有weekdayproperty(未的方法)。無需括號即可訪問屬性,因此只需使用df['date'].dt.weekday而不是df['date'].dt.weekday()


例如,

import pandas as pd 
df = pd.DataFrame({'date': pd.date_range('2000-1-1', periods=7)}) 
df['dow'] = df['date'].dt.strftime('%w') 
df['dow2'] = df['date'].dt.weekday 
df['dow3'] = df['date'].dt.strftime('%a') 

產生

 date dow dow2 dow3 
0 2000-01-01 6  5 Sat 
1 2000-01-02 0  6 Sun 
2 2000-01-03 1  0 Mon 
3 2000-01-04 2  1 Tue 
4 2000-01-05 3  2 Wed 
5 2000-01-06 4  3 Thu 
6 2000-01-07 5  4 Fri 

它通常說, 「Python中一切都是對象」。因此,瞭解每個對象的類型非常重要,因爲它決定了該對象具有哪些方法和屬性。 The documentation you linked to,顯示可用於datetime.datetime對象的方法。由於df['date'].dt是一個pandas.tseries.common.DatetimeProperties對象,因此它具有不同的屬性。


每當你看到以下形式的錯誤消息

blahblah object is not callable 

Python是告訴你它發現了一個物體,objblahblah類型隨後 括號 - 即它遇到obj(...)其中type(obj)blahblah。括號會導致Python調用該對象。因此, 抱怨obj不可調用。

因此,爲了在未來尋找問題的根源,請在完整的回溯錯誤消息中找到提及的行 並查找括號。

df_raw['DayOfWeek'] = df_raw[str_date_colname].dt.weekday() 

在這些括號的前立即目的應該是blahblah類型。例如,df_raw[str_date_colname].dt.weekday的類型爲Series。 然後你會知道問題的根源。一旦你知道df_raw[str_date_colname].dt.weekday是一個系列,你會很好奇,看看它的價值是什麼,然後你會發現它已經是你正在尋找的價值。

+0

感謝您的詳細解釋! – Kevin