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)