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

Calcul scientifique Python Discussion :

[pandas] probléme de conversion string à date


Sujet :

Calcul scientifique Python

  1. #1
    Membre du Club
    Femme Profil pro
    Ergonome
    Inscrit en
    Février 2016
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Ergonome

    Informations forums :
    Inscription : Février 2016
    Messages : 53
    Points : 43
    Points
    43
    Par défaut [pandas] probléme de conversion string à date
    Bonjour

    Je dois faire une analyse par saison et par mois et j'ai la variable date string , et pour chaque observation j'ai beaucoup de dates qui lui correspondent j'ai fais un petit code mais ça ne marche pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    df = pd.read_csv(infile,header=None ,sep='\t')
    df.columns = ['lat','lon','avg','nbr','dt']
    for i in range(len(df['lat'])):
       df['dt'][i] = pd.to_datetime(df['dt'][i], format='%Y%m%d')

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par fafa isfan Voir le message
    Je dois faire une analyse par saison et par mois et j'ai la variable date string , et pour chaque observation j'ai beaucoup de dates qui lui correspondent j'ai fais un petit code mais ça ne marche pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    df = pd.read_csv(infile,header=None ,sep='\t')
    df.columns = ['lat','lon','avg','nbr','dt']
    for i in range(len(df['lat'])):
       df['dt'][i] = pd.to_datetime(df['dt'][i], format='%Y%m%d')
    Ca ne marche pas <=> un message d'erreur ou obtenir des données différentes de celles attendues.
    Ce qui suppose poster aussi le message d'erreur et/ou le contenu de "df['dt'][i]".

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre du Club
    Femme Profil pro
    Ergonome
    Inscrit en
    Février 2016
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Ergonome

    Informations forums :
    Inscription : Février 2016
    Messages : 53
    Points : 43
    Points
    43
    Par défaut
    le contenue de df['dt'][1] est le suivant

    {(20150430),(20150430),(20150430),(20150430),(20150430),(20150430),(20150430),(20150430),(20150430),(20150430),(20150430),(20150430),(20150430),(20150430),(20150430),(20150430),(20150430),(20150430),(20150430),(20150430),(20150430),(20150430),(20150430),(20150430),(20150430),(20150812),(20150812),(20150812),(20150812),(20150812),(20150812),(20150812),(20150812),(20150812),(20150812),(20150812),(20150812),(20150812),(20150812),(20150812),(20150812),(20150812),(20140531),(20140531),(20140531),(20140531),(20140531),(20150414),(20150414),(20150414),(20150414),(20150414),(20150414),(20150414),(20150414),(20150414),(20150414),(20150414),(20150414),(20150414),(20150414),(20150414),(20150414),(20150414),(20150414),(20150414),(20150414),(20150414),(20150414),(20150414),(20150122),(20150122),(20150122),(20150122),(20150122),(20150122),(20150122),(20150122),(20150122),(20150122),(20150122),(20150122),(20150122),(20150122),(20150122),(20150122),(20150122),(20150122),(20150122),(20150122),(20150122),(20150122),(20150122),(20150122),(20160119),(20141130),(20141130),(20141130),(20141130),(20141130),(20141130),(20141130),(20151005),(20151005),(20151005),(20151005),(20151005),(20151005),(20151005),(20151005),(20151005),(20151005),(20151005),(20151005),(20151005),(20151005),(20151005),(20151005),(20151005),(20151005),(20151005),(20151005),(20151005)}

    pour le message d'erreur affiché :

    does not match format '%Y%m%d'

  4. #4
    Membre du Club
    Femme Profil pro
    Ergonome
    Inscrit en
    Février 2016
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Ergonome

    Informations forums :
    Inscription : Février 2016
    Messages : 53
    Points : 43
    Points
    43
    Par défaut
    mais quand je fais df['dt'][1][1]

    il m'affiche (

    et la je ne sais pas comment résoudre ce problème merci pour votre aide

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par fafa isfan Voir le message
    le contenue de df['dt'][1] est le suivant

    {(20150430),(20150430),(20150430),(20150430),(20150430),(20150430),(20150430),(20150430),(20150430),(20150430),(20150430),(20150430),(20150430),(20150430),(20150430),(20150430),(20150430),(20150430),(20150430),(20150430),(20150430),(20150430),(20150430),(20150430),(20150430),(20150812),(20150812),(20150812),(20150812),(20150812),(20150812),(20150812),(20150812),(20150812),(20150812),(20150812),(20150812),(20150812),(20150812),(20150812),(20150812),(20150812),(20140531),(20140531),(20140531),(20140531),(20140531),(20150414),(20150414),(20150414),(20150414),(20150414),(20150414),(20150414),(20150414),(20150414),(20150414),(20150414),(20150414),(20150414),(20150414),(20150414),(20150414),(20150414),(20150414),(20150414),(20150414),(20150414),(20150414),(20150414),(20150122),(20150122),(20150122),(20150122),(20150122),(20150122),(20150122),(20150122),(20150122),(20150122),(20150122),(20150122),(20150122),(20150122),(20150122),(20150122),(20150122),(20150122),(20150122),(20150122),(20150122),(20150122),(20150122),(20150122),(20160119),(20141130),(20141130),(20141130),(20141130),(20141130),(20141130),(20141130),(20151005),(20151005),(20151005),(20151005),(20151005),(20151005),(20151005),(20151005),(20151005),(20151005),(20151005),(20151005),(20151005),(20151005),(20151005),(20151005),(20151005),(20151005),(20151005),(20151005),(20151005)}

    pour le message d'erreur affiché :

    does not match format '%Y%m%d'
    Le contenu de df['dt'][1] n'est visiblement pas une date au format '%Y%m%d'... Donc, techniquement, çà ne peut pas fonctionner.

    Si ce sont toutes les dates qui correspondent à une observation, la question pourrait être de savoir comment extraire chacune d'entre elles(*) pour leur appliquer une conversion en date pour autant que cela ait un sens par rapport à ce que vous voulez faire (la question étant: un fois cette chose convertie en dates, çà va vous avancer à quoi?).
    (*) faire une boucle for qui segmente la chaine de caractères en sous chaines de 11 pour en extraire 8 caractères est quelque chose que vous devez savoir faire: c'est ce qu'on apprend au tout début de n'importe quel tuto.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Membre du Club
    Femme Profil pro
    Ergonome
    Inscrit en
    Février 2016
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Ergonome

    Informations forums :
    Inscription : Février 2016
    Messages : 53
    Points : 43
    Points
    43
    Par défaut
    j'ai fais ça mais ça me demande beaucoup de temps car j'ai une double boucle donc j'essayais de refaire ça en évitant d'utiliser une double boucle

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par fafa isfan Voir le message
    j'ai fais ça mais ça me demande beaucoup de temps car j'ai une double boucle donc j'essayais de refaire ça en évitant d'utiliser une double boucle
    ah ben il faut ce qu'il faut... quitte à chercher à optimiser ensuite.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  8. #8
    Membre du Club
    Femme Profil pro
    Ergonome
    Inscrit en
    Février 2016
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Ergonome

    Informations forums :
    Inscription : Février 2016
    Messages : 53
    Points : 43
    Points
    43
    Par défaut
    merci pour votre réponse

  9. #9
    Membre éprouvé

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    654
    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 : 654
    Points : 1 150
    Points
    1 150
    Par défaut
    Salut,

    Pour mieux se figurer le contenu du dataframe, que retourne la commande:
    Normalement vous ne devriez pas avoir à faire appel à une boucle pour transformer les données d'une colonne. Pandas gère merveilleusement cela. Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    import pandas as pd
     
    # Generate some data
    data = {
        'Date': ['20050101', '20060101', '20070101'],
        'value': [10, 20, 30]
        }
    df = pd.DataFrame(data)
     
    # Transform column 'Date' into pandas Datetime object
    df['Date'] = pd.to_datetime(df['Date'], format='%Y%m%d')
    J

  10. #10
    Membre du Club
    Femme Profil pro
    Ergonome
    Inscrit en
    Février 2016
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Ergonome

    Informations forums :
    Inscription : Février 2016
    Messages : 53
    Points : 43
    Points
    43
    Par défaut
    le soucis que pour moi , pour chaque valeurs j'ai beaucoup de date c'est pour ça que je suis obligé de faire une boucle ,y a t il une autre solution ?

  11. #11
    Membre du Club
    Femme Profil pro
    Ergonome
    Inscrit en
    Février 2016
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Ergonome

    Informations forums :
    Inscription : Février 2016
    Messages : 53
    Points : 43
    Points
    43
    Par défaut
    voici ce qu'il m'affiche quand je fais df.head(5)

    lat lon
    0 0 135
    1 0 -200
    2 0 20
    3 0 -55
    4 0 -39

    date
    0 {(20150324),(20150324),(20150324),(20150324),(...
    1 {(20150430),(20150430),(20150430),(20150430),(...
    2 {(20150110),(20150110),(20150110),(20150110),(...
    3 {(20150824),(20150824),(20150824),(20150824),(...
    4 {(20141116),(20141116),(20141116),(20141116),(...

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Charge Etudes Statistiques
    Inscrit en
    Avril 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Charge Etudes Statistiques

    Informations forums :
    Inscription : Avril 2016
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Tu peux réaliser cette conversion de la façon suivante :


    1°) Transformer la liste de date en array pour chaque ligne (En utilisant les expressions régulières) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    # Création de la table DF 
    import pandas as pd
    df=pd.DataFrame({'lat':[46.1,47.2],
                     'dt':['{(20120312),(20130415)}','{(20130510),(20150815)}']})
    # Transofrmation de la colonne date en array de date
    df['dt']=df['dt'].str.findall('([0-9]{8})')
    2°) On va ensuite utiliser apply + lambda pour appliquer sur chaque élement de l'array la fonction to_datetime :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    # Pour chaque élement appliquer la fonction to_datetime 
    df['dt']=df['dt'].apply(lambda x: pd.to_datetime(x,format='%Y%m%d'))

  13. #13
    Membre éprouvé

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    654
    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 : 654
    Points : 1 150
    Points
    1 150
    Par défaut
    Citation Envoyé par fafa isfan Voir le message
    0 {(20150324),(20150324),(20150324),(20150324)
    Marrant, c'est toujours la même date. Est-ce parce que c'est juste un fragment?

  14. #14
    Membre du Club
    Femme Profil pro
    Ergonome
    Inscrit en
    Février 2016
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Ergonome

    Informations forums :
    Inscription : Février 2016
    Messages : 53
    Points : 43
    Points
    43
    Par défaut
    non c'est beaucoup de mesures dans la même date y'a d'autres dates mais c'est pas afficher car j'ai pris les 5 premiers

  15. #15
    Membre du Club
    Femme Profil pro
    Ergonome
    Inscrit en
    Février 2016
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Ergonome

    Informations forums :
    Inscription : Février 2016
    Messages : 53
    Points : 43
    Points
    43
    Par défaut
    j'ai essayé ce que m'as proposé datasteo et ça marche merci énormément

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Date] Conversion String --> date, problème de format
    Par hannibal.76 dans le forum Collection et Stream
    Réponses: 8
    Dernier message: 15/12/2011, 21h54
  2. Problème de conversion String to Date
    Par Nathan_56 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 06/11/2009, 16h39
  3. Problème de conversion string->int
    Par seheiahs dans le forum Langage
    Réponses: 4
    Dernier message: 28/06/2006, 10h42
  4. [T-SQL] Problème de conversions de dates
    Par kooljy dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 08/06/2006, 14h19
  5. - [CAST ou CONVERT] Problème de conversion de date
    Par Boublou dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 06/07/2004, 14h31

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