2016-04-08 10 views
1
# Give day of the week 
def DOW(df): 
    DOW = pd.Series(datetime.datetime.strptime(df['indx'],'%Y%m%d').strftime('%A')) 
    df = df.join(DOW) 
    return df 

ich von einem anderen Skript diese Funktion nenne als wobei d mein Datenrahmen ist, die ich passiere DOW funktionierenExtract Tag der Woche aus der Spalte in Datenrahmen und setzte in einer anderen Spalte

d = TA.DOW(d) 

Es wirft die Error . was kann

DOW=pd.Series(datetime.datetime.strptime(df['indx'],'%Y%m%d').strftime('%A')) 
TypeError: must be string, not Series 
+1

Sie können nur 'dt.dayofweek' anrufen oder' dt.strftime ('% A') 'in dieser Spalte, wenn der dtype bereits datetime ist, also 'df [' indx ']. Dt.strftime ('% A ')' sollte funktionieren – EdChum

+0

Der Fehler ist auch selbsterklärend, du versuchst es Übergeben Sie eine 'Serie', also die gesamte Spalte an eine Funktion, die eine Zeichenkette übernimmt. – EdChum

Antwort

1

Lösung für gleiche sein Ich glaube, Sie erste Spalte indxto_datetime und dann dt.strftime wie erwähnt EdChum verwenden umwandeln kann:

print df 
     indx Value 
0 20020101 3.00 
1 20020102 3.50 
2 20020103 3.30 
3 20100101 4.96 
4 20100102 4.98 

df['new'] = pd.to_datetime(df['indx'], format='%Y%m%d').dt.strftime('%A') 
print df 
     indx Value  new 
0 20020101 3.00 Tuesday 
1 20020102 3.50 Wednesday 
2 20020103 3.30 Thursday 
3 20100101 4.96  Friday 
4 20100102 4.98 Saturday 
Verwandte Themen