IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Problème filtre données dataframe avec fonction


Sujet :

Python

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2020
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2020
    Messages : 7
    Par défaut Problème filtre données dataframe avec fonction
    Bonjour, j'ai un petit problème concernant les dataframes panda.

    Je crée un dataframe Pandas à partir d'un fichier excel.
    L'une des colonnes contient une date stockée sous forme de str.
    Je la convertis donc en objet datetime avec la bibliothèque associée.
    Je souhaite ensuite "diviser" mon dataframe en 2 nouveaux dataframe, l'un qui contiendra les lignes dont l'heure est supérieure à 13h, et l'autre celles pour lesquels l'heure est inférieure à 13h.
    Malheureusement la syntaxe que j'utilise est incorrecte.

    Voici actuellement mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    orders = pd.read_excel('data', sheet_name="feuil1",usecols='A,G,H,J,L')
    for i in range(len(orders)):
        orders.at[i,'Date']=dt.datetime.strptime(orders.loc[i,'Date'],'%d/%m/%Y %H:%M')
    AM = dt.time(13)
    ordersM=orders[orders['Date'].time()<=AM]
    ordersAM=orders[orders['Date'].time()>AM]
    et bien évidemment j'obtiens l'erreur : AttributeError: 'Series' object has no attribute 'time'

    Auriez-vous une idée de comment faire ?

    J'ai essayé de faire une boucle for qui ressemblait à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ordersM = orders[(date.time()<=AM for date in orders['Date'])]
    mais j'ai alors un message du genre "Index out of bounds" (que je ne comprends pas vraiment d'ailleurs).

    Je précise que j'aimerais conserver la date complète dans les dataframes, même si je n'utilise que l'heure pour les "trier".

    Auriez-vous une idée ?

    Merci d'avance

  2. #2
    Membre émérite

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 662
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ordersM = orders[orders['Date'].time() <= AM]
    Cette méthode me semble être la bonne. L'erreur que vous obtenez indique que la série orders['Date'] ne possède pas d'attribut time. Je pense qu'intuitivement vous voulez récupérer les valeurs de temps de cette série. Mais je ne pense pas que cela soit nécessaire. Essayez juste:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ordersM = orders[orders['Date'] <= AM]
    Si cela ne marche pas, pourriez vous donner un extrait de votre dataframe orders ? Juste quelques lignes, quelques colonnes.

    Sinon, ce bout de code m'a l'air bien compliqué (et inefficace):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for i in range(len(orders)):
        orders.at[i,'Date']=dt.datetime.strptime(orders.loc[i,'Date'],'%d/%m/%Y %H:%M')
    Pandas propose d'interpréter les dates à la lecture du tableau. Regardez du côté des argument 'parse_dates' et 'date_parser'.

    J

  3. #3
    Membre éclairé
    Homme Profil pro
    Data Lover
    Inscrit en
    Décembre 2014
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Data Lover
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2014
    Messages : 96
    Par défaut
    Salut,

    Si tu veux filtrer ton dataframe en fonction de l'heure, la méthode à utiliser c'est "dataframe.dt.hour".
    Voici un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
     
    import pandas as pd 
     
    # Cration d'une Serie
    data = pd.Series(['2019-10-20 08:00', '2019-11-22 10:00', '2019-7-19 12:30', '2019-02-15 10:45', 
    				'2019-4-23 09:22', '2019-11-3 04:00']) 
     
    # Création des index
    index = ['Date 1', 'Date 2', 'Date 3', 'Date 4', 'Date 5', 'Date 6'] 
     
    # Définition d'index
    data.index = index 
     
    # Conversion de la Serie en dataframe
    data= pd.to_datetime(data) 
     
    # Filtre du dataframe en fonction de l'heure
     
    result1 = (data[data.dt.hour > 9])
    result2 = (data[data.dt.hour <= 9])
     
    print(result1)
    print(result2)
     
    # Résultats 
     
    Date 2   2019-11-22 10:00:00
    Date 3   2019-07-19 12:30:00
    Date 4   2019-02-15 10:45:00
    dtype: datetime64[ns]
    Date 1   2019-10-20 08:00:00
    Date 5   2019-04-23 09:22:00
    Date 6   2019-11-03 04:00:00
    dtype: datetime64[ns]

Discussions similaires

  1. [ZF 1.11] Problème récupération données multicheckbox avec relation HABTM
    Par kiradeus dans le forum Zend_Form
    Réponses: 1
    Dernier message: 09/08/2012, 16h04
  2. Problème indice de ligne avec fonction Large
    Par julio44 dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 22/07/2011, 14h49
  3. Réponses: 7
    Dernier message: 12/06/2011, 07h14
  4. problème de copié-collé avec fonction RECHERCHEV
    Par vatsyayana dans le forum Excel
    Réponses: 4
    Dernier message: 09/02/2009, 23h43
  5. Réponses: 5
    Dernier message: 02/12/2008, 16h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo