Удалить строки в кадре данных, где первый столбец является выходной - PullRequest
0 голосов
/ 09 января 2019

У меня есть 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)]

но это не работает.

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Вы можете создать список исключений (если вы хотите добавить другие дни) следующим образом:

day_exclusion = ['Saturday', 'Sunday']

Приведенный ниже код преобразует столбец даты в d-тип datetime, который был необходим только с учетом того, что я использовал pd.read_clipboard () для воссоздания вашего фрейма данных (если ваш dtype уже является временем данных, вы можете удалить часть pd.to_datetime). Затем он возвращает фрейм данных со всеми днями, отсутствующими в вашем списке исключений.

df[~(pd.to_datetime(df['date']).dt.weekday_name.isin(day_exclusion))]

Результат:

enter image description here

0 голосов
/ 09 января 2019

«Более простой» подход будет использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...