Wenn df
ein Pandas Datenrahmen ist, dann df['date']
ist eine Serie. Wenn df['date']
Datumsangaben enthält (insbesondere wenn der D-Typ datetime64[ns]
s ist), dann wird die Serie eine .dt
accessor haben.
In [12]: type(df['date'])
Out[12]: pandas.core.series.Series
In [13]: type(df['date'].dt)
Out[13]: pandas.tseries.common.DatetimeProperties
Die DatetimeProperties
Objekt zurückgegeben durch df['date'].dt
hat eine weekday
property (keine Methode). Auf die Eigenschaften wird ohne Klammern zugegriffen. Verwenden Sie einfach df['date'].dt.weekday
anstelle von df['date'].dt.weekday()
.
Zum Beispiel
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')
ergibt
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
Es ist allgemein behauptet, dass "Alles, was in Python ist ein Objekt". Daher ist es sehr wichtig, den Typ jedes Objekts zu verstehen, da dies bestimmt, welche Methoden und Attribute dieses Objekt haben wird. The documentation you linked to, zeigt die verfügbaren Methoden für datetime.datetime
Objekte. Da df['date'].dt
ein pandas.tseries.common.DatetimeProperties
Objekt ist, hat es verschiedene Attribute.
Jedes Mal, wenn Sie eine Fehlermeldung des Formulars sehen
blahblah object is not callable
Python Sie sagt es ein Objekt gefunden, obj
vom Typ blahblah
von Klammern - dh, es obj(...)
angetroffen, wo type(obj)
ist blahblah
. Die Klammern bewirken, dass Python das Objekt aufruft. So ist es beschweren, dass obj
nicht aufrufbar ist.
Um die Quelle des Problems in Zukunft zu finden, suchen Sie die Zeile in der vollständigen Traceback-Fehlermeldung und suchen Sie nach Klammern.
df_raw['DayOfWeek'] = df_raw[str_date_colname].dt.weekday()
Das Objekt unmittelbar vor diesen Klammern sollte blahblah
Typ sein. Zum Beispiel ist df_raw[str_date_colname].dt.weekday
vom Typ Series
. Sie werden dann die Ursache des Problems kennen. Sobald Sie wissen, dass es sich bei df_raw[str_date_colname].dt.weekday
um eine Serie handelt, werden Sie neugierig sein, welche Werte es hat, und dann werden Sie feststellen, dass es bereits die Werte sind, nach denen Sie suchen.
Können Sie Wert und Typ von 'df_raw [str_date_colname] .dt' drucken? –
@Shpionus ist es –
Kevin