Python 3.x 在第一列为周末日期的数据框中删除行
我有一个Python 3.x 在第一列为周末日期的数据框中删除行,python-3.x,pandas,datetime,Python 3.x,Pandas,Datetime,我有一个数据帧,看起来(例如)如下: 我想从数据框中删除日期列包含周末日期的行 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
数据帧
,看起来(例如)如下:
我想从数据框中删除日期列包含周末日期的行
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
....
但是它不起作用。更简单的方法可以利用(0周一,6周日)
您可以创建排除列表(如果您想添加其他日期),如下所示: 下面的代码将日期列转换为datetime数据类型,这仅在我使用pd.read_clipboard()重新创建数据帧时才有必要(如果您的数据类型已经是datatime,则可以删除pd.to_datetime部分)。然后它返回一个数据帧,其中包含所有不在排除列表中的日期
df[~(pd.to_datetime(df['date']).dt.weekday_name.isin(day_exclusion))]
结果:
这段代码工作得非常好 它将从数据帧中删除“星期六”和“星期日”记录
# *********** 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)
您不需要
任何(0)
,只需使用df[~df.date.dt.weekday\u name.isin(['Saturday','Sunday'])]
any(0)
折叠为单个布尔值(可能True
),而您需要一个布尔向量/数组。请尝试以下操作:df=df[df.date.dt.weekday<5]
Duh,谢谢jpp的帮助。
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
day_exclusion = ['Saturday', 'Sunday']
df[~(pd.to_datetime(df['date']).dt.weekday_name.isin(day_exclusion))]
# *********** 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)