Если df
является Панда 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
DatetimeProperties
объект, возвращаемый df['date'].dt
имеет 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 это <класс 'pandas.tseries.common.DatetimeProperties'> – Kevin