如果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
對象具有weekday
property(未的方法)。無需括號即可訪問屬性,因此只需使用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是告訴你它發現了一個物體,obj
,blahblah
類型隨後 括號 - 即它遇到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
是一個系列,你會很好奇,看看它的價值是什麼,然後你會發現它已經是你正在尋找的價值。
您可以打印df_raw [str_date_colname] .dt的值和類型嗎? –
@Shpionus它是 –
Kevin