如果 df 是 Pandas DataFrame,那么 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 中的一切都是对象”。因此,了解每个对象的 type 非常重要,因为这决定了该对象将具有哪些方法和属性。 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 是一个系列,您就会很好奇它的值是什么,然后您会发现它已经是您要查找的值。