我有一个Dataframe
看起来像(例如)这样:
print(df)
date high low close
0 2008-01-01 15.540 15.540 15.54
1 2008-01-02 15.750 15.210 15.25
2 2008-01-03 15.450 14.950 15.02
3 2008-01-04 14.990 14.400 14.48
4 2008-01-05 14.890 14.400 14.78
5 2008-01-06 14.890 14.400 14.78
....
我想从Dataframe
的日期栏中包含周末的行中删除行。
date high low close
0 2008-01-01 15.540 15.540 15.54
1 2008-01-02 15.750 15.210 15.25
2 2008-01-03 15.450 14.950 15.02
3 2008-01-04 14.990 14.400 14.48
4 <-- has been removed since 1/05/2008 is a Saturday
5 <-- has been removed since 1/06/2008 is a Sunday
....
我尝试过:
df = df[~df.date.dt.weekday_name.isin(['Saturday','Sunday']).any(0)]
但它不起作用。
答案 0 :(得分:1)
您可以这样创建一个排除列表(以防您想添加其他日子):
day_exclusion = ['Saturday', 'Sunday']
下面的代码将date列转换为datetime dtype,只有在我使用pd.read_clipboard()重新创建您的数据框的情况下才有必要(如果dtype已经是datatime,则可以删除pd.to_datetime部分)。然后,它会返回一个数据框,其中包含全天不在您的排除列表中的数据。
df[~(pd.to_datetime(df['date']).dt.weekday_name.isin(day_exclusion))]
结果:
答案 1 :(得分:0)
“更轻松”的方法将使用dt.weekday
(星期一0,星期一6)
df = df[df.date.dt.weekday < 5]
或:
df.query('date.dt.weekday < 5', inplace=True)
完整示例:
import pandas as pd
df = pd.DataFrame({
'date': pd.date_range(start='2019-01-01', end='2019-01-07'),
'name': [
'Robert Baratheon',
'Jon Snow',
'Daenerys Targaryen',
'Theon Greyjoy',
'Tyrion Lannister',
'Cersei Lannister',
'Sansa Stark'
]
})
df = df[df.date.dt.weekday < 5]
print(df)
返回:
date name
0 2019-01-01 Robert Baratheon
1 2019-01-02 Jon Snow
2 2019-01-03 Daenerys Targaryen
3 2019-01-04 Theon Greyjoy
6 2019-01-07 Sansa Stark
答案 2 :(得分:0)
这段代码完美地工作。
它将从数据框中删除“星期六”和“星期日”记录
# *********** Removing weekend data from dataframe. ***************
df["weekday"] = pd.to_datetime(df.date).dt.dayofweek
no_weekend_data = df.drop(df.loc[df["weekday"] > 4].index)