3
votes

Déposer des lignes dans un dataframe où la première colonne est une date de week-end

J'ai un Dataframe qui ressemble (par exemple) à ceci:

df = df[~df.date.dt.weekday_name.isin(['Saturday','Sunday']).any(0)]

Je voudrais supprimer les lignes du Dataframe dont la colonne de date contient une date de week-end.

           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
....

J'ai essayé ceci:

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
....

mais cela ne fonctionne pas.


3 commentaires

Vous n'avez pas besoin de any (0) , utilisez simplement df [~ df.date.dt.weekday_name.isin (['Saturday', 'Sunday'])] . any (0) se réduit à une seule valeur booléenne (probablement True ), alors que vous avez besoin d'un vecteur / tableau de booléens.


Essayez ceci: df = df [df.date.dt.weekday <5]


Duh, merci jpp qui fonctionne.


3 Réponses :


0
votes

L'approche "plus simple" utiliserait dt.weekday (0 lundi, 6 dimanche)

        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

ou:

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)

Exemple complet:

df.query('date.dt.weekday < 5', inplace=True)

Renvoie:

df = df[df.date.dt.weekday < 5]


0 commentaires

1
votes

Vous pouvez créer une liste d'exclusion (au cas où vous voudriez ajouter d'autres jours) comme ceci:

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

Le code ci-dessous convertit la colonne de date en un dtype datetime, ce qui était seulement nécessaire étant donné J'ai utilisé pd.read_clipboard () pour recréer votre dataframe (si votre dtype est déjà un datatime, vous pouvez supprimer la partie pd.to_datetime). Ensuite, il renvoie un cadre de données avec tous les jours ne figurant pas dans votre liste d'exclusion.

day_exclusion = ['Saturday', 'Sunday']

Résultats dans:

 entrez la description de l'image ici a >


0 commentaires

0
votes

Ce morceau de code fonctionne parfaitement.

Il supprimera les enregistrements "samedi" et "dimanche" du dataframe

        # *********** 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 commentaires