2016-11-10 2 views
4

Beispieldateneine Reihe von Datenrahmen löschen, wenn der Index (Datetime) Sonntag ist

       Open  High  Low Close 
DateTime              
2016-01-03 00:00:00+00:00 1.08701 1.08723 1.08451 1.08515 
2016-01-04 00:00:00+00:00 1.08701 1.09464 1.07811 1.08239 
2016-01-05 00:00:00+00:00 1.08238 1.08388 1.07106 1.07502 
2016-01-06 00:00:00+00:00 1.07504 1.07994 1.07185 1.07766 
2016-01-07 00:00:00+00:00 1.07767 1.09401 1.07710 1.09256 
2016-01-08 00:00:00+00:00 1.09255 1.09300 1.08030 1.09218 

Datetime der Index ist, müssen Sie die Zeile löschen, die Datetime als Sonntag oder Samstag (2016.01.03) hat.

Ich lese diese Daten aus einer Datei cvs

df = pd.read_csv(filename, names=['DateTime','Open','High','Low','Close'], 
       parse_dates = [0], index_col = 'DateTime') 

versucht, so etwas wie unten zu tun, aber hat nicht funktioniert.

df = df.drop(df[df.weekday() == 6].index) #delete Sundays 
+4

Sie können df just do df '= [! Df.index.weekday = 6]', was Sie versucht, würde nicht funktionieren, weil "drop" nach Index-Labels sucht, die man fallen lassen kann. Du hast eine boolesche Serie übergeben, weshalb es nicht funktioniert. – EdChum

+1

Ich würde sagen: 'df = df.loc [df.index.dayofweek <5]' – MaxU

+0

df = df [df.weekday! = 6] ---- hat gearbeitet –

Antwort

5

Sie könnten asfreq('B')-reindex df zu Zeilen verwenden, die business days sind. Beachten Sie jedoch, dass, wenn ein Geschäftstag von df.index fehlt, asfreq einen DataFrame mit einer Reihe von NaNs zurückgibt, um die fehlende Zeile anzuzeigen. Beachten Sie auch, dass df.index ein DatetimeIndex sein muss.

In [106]: df.asfreq('B') 
Out[106]: 
       Open  High  Low Close 
2016-01-04 1.08701 1.09464 1.07811 1.08239 
2016-01-05 1.08238 1.08388 1.07106 1.07502 
2016-01-06 1.07504 1.07994 1.07185 1.07766 
2016-01-07 1.07767 1.09401 1.07710 1.09256 
2016-01-08 1.09255 1.09300 1.08030 1.09218 

Hier ist das Setup verwendet, um das Ergebnis über produzieren:

import pandas as pd 
df = pd.DataFrame(
    {'Close': [1.0851500000000001, 1.08239, 1.0750200000000001, 1.0776600000000001, 1.09256, 1.0921799999999999], 'DateTime': ['2016-01-03 00:00:00+00:00', '2016-01-04 00:00:00+00:00', '2016-01-05 00:00:00+00:00', '2016-01-06 00:00:00+00:00', '2016-01-07 00:00:00+00:00', '2016-01-08 00:00:00+00:00'], 'High': [1.0872299999999999, 1.0946400000000001, 1.08388, 1.0799399999999999, 1.0940099999999999, 1.093], 'Low': [1.0845100000000001, 1.0781100000000001, 1.0710600000000001, 1.07185, 1.0770999999999999, 1.0803], 'Open': [1.08701, 1.08701, 1.0823799999999999, 1.07504, 1.0776700000000001, 1.0925499999999999]}) 
df['DateTime'] = pd.to_datetime(df['DateTime']) 
df = df.set_index('DateTime') 
print(df.asfreq('B')) 
+0

df = df.asfreq ('B') ---- hat gearbeitet. Danke unutbu –

Verwandte Themen