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 :

Enlever les caractères pandas dataframe


Sujet :

Python

  1. #1
    Membre actif
    Inscrit en
    Août 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 41
    Par défaut Enlever les caractères pandas dataframe
    salam,
    j'ai un fichier un fichier excel qui contient des dates avec lettres et je veux repmlacer les lettres en blonc et garder que les chiffres avec slash
    j'ai essayé ce script mais il m'ecrase les colones qui contiennent pas les lettres par NaN
    voila l'exemple:
    Colone
    12/03/86
    11/01/1978 برج الغدير
    19/12/1978 عنابة
    20/04/1971 عنابة
    12/06/1962 عنابة
    07/01/1978 قسنطينة
    12/06/1965 واد زناتي
    31/08/1989 سوق أهراس
    01/04/1988 عنابة
    02/07/1974 لخضارة
    04/01/1977 عنابة
    10/08/1987 بن عزوز
    je veux avoir ca:
    Colone
    12/03/86
    11/01/1978
    19/12/1978
    20/04/1971
    12/06/1962
    07/01/1978
    12/06/1965
    31/08/1989
    01/04/1988
    02/07/1974
    04/01/1977
    10/08/1987

    j'ai essayé en pandas ce script:
    df['Colone'] = df['Colone'].str.replace(r'[^\d/]+',r'',regex=True) mais il me donne pas la valeur de la premiere ligne ca:
    NaN
    11/01/1978
    19/12/1978
    20/04/1971
    12/06/1962
    07/01/1978
    12/06/1965
    31/08/1989
    01/04/1988
    02/07/1974
    04/01/1977
    10/08/1987
    Merci d'avance.

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

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

    Informations forums :
    Inscription : Février 2006
    Messages : 12 815
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par didoalilo Voir le message
    et garder que les chiffres avec slash
    Code python : 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
    data=(
    	"12/03/86",
    	"11/01/1978 برج الغدير",
    	"19/12/1978 عنابة",
    	"20/04/1971 عنابة",
    	"12/06/1962 عنابة",
    	"07/01/1978 قسنطينة",
    	"12/06/1965 واد زناتي",
    	"31/08/1989 سوق أهراس",
    	"01/04/1988 عنابة",
    	"02/07/1974 لخضارة",
    	"04/01/1977 عنابة",
    	"10/08/1987 toto",
    )
     
    data2=tuple(x.split(" ")[0] for x in data)
    print(data2)

    PS: ces chiffres avec slash se nomment des "dates".
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 696
    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 696
    Par défaut
    Citation Envoyé par didoalilo Voir le message
    j'ai essayé en pandas ce script:
    Visuellement, il y a 2 colonnes, une qui contient une date et l'autre des caractères.
    Si la lecture du fichier avec pandas ne récupère qu'une colonne, c'est probablement parce que vous n'avez pas précisé le séparateur (le blanc).... Et vous vous retrouvez à devoir nettoyer ensuite.


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

  4. #4
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 049
    Par défaut
    Hello,

    Il y a beaucoup de solutions, notamment avec les expressions régulières, mais ma préféré serait d'utiliser la méthode parse du module dateutil. (référence sur la doc officielle du module datetime).

    C'est une bibliothèque tierce, mais comme je vois l'utilisation de pandas, ça doit pas être trop gênant...

    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
    from dateutil.parser import parse
     
     
    def extract_dates(data):
        for x in data:
            try:
                date_string = parse(x, fuzzy=True)
            except ValueError:
                continue
            yield date_string.strftime('%d/%m/%Y')
     
    data = (
        "12/03/86",
        "11/01/1978 برج الغدير",
        "19/12/1978 عنابة",
        "20/04/1971 عنابة",
        "12/06/1962 عنابة",
        "07/01/1978 قسنطينة",
        "12/06/1965 واد زناتي",
        "31/08/1989 سوق أهراس",
        "01/04/1988 عنابة",
        "02/07/1974 لخضارة",
        "04/01/1977 عنابة",
        "10/08/1987 toto",
    )
     
    data2 = tuple(extract_dates(data))
    print(data2)
    La pointe est la possibilité d'interpréter différents formats de date dans le cas où l'occasion se présenterait, mais ça ne serait sans doute pas la plus efficace des méthodes car avoir plus de flexibilité impacte sans doute sur les performances.
    Pour avoir du plus efficace, je pense que les expressions régulières sont équivalentes au code avec split

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

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

    Informations forums :
    Inscription : Février 2006
    Messages : 12 815
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    car avoir plus de flexibilité impacte sans doute sur les performances.
    Hé oui, fatalement.
    Mais dans 95% des cas la différence est assez minime et reste bien souvent négligée. J'ai beaucoup aimé ce module "dateutil" que tu nous as montrés et que je ne connaissais pas
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Membre actif
    Inscrit en
    Août 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 41
    Par défaut
    salam,
    merci pour votre reponse.
    pour information, j'ai tout un fichier qui contient cette liste.
    est ce que peux faire ce code en pandas dataframe comme ca:
    df=tuple(x.split(" ")[0] for x in df['Colone'])

    Merci d'avance.

    Citation Envoyé par Sve@r Voir le message
    Bonjour

    Code python : 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
    data=(
    	"12/03/86",
    	"11/01/1978 برج الغدير",
    	"19/12/1978 عنابة",
    	"20/04/1971 عنابة",
    	"12/06/1962 عنابة",
    	"07/01/1978 قسنطينة",
    	"12/06/1965 واد زناتي",
    	"31/08/1989 سوق أهراس",
    	"01/04/1988 عنابة",
    	"02/07/1974 لخضارة",
    	"04/01/1977 عنابة",
    	"10/08/1987 toto",
    )
     
    data2=tuple(x.split(" ")[0] for x in data)
    print(data2)

    PS: ces chiffres avec slash se nomment des "dates".

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    721
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 721
    Par défaut
    Le regex n'est pas juste. Ceci devrait être OK:
    C'est rudimentaire et approximatif mais suffisant dans ce cas de figure.
    Le caret (^) marque le début de ligne. Et l'expression que l'on veut matcher est inclue entre crochets. Ensuite, on escape le slash aussi.
    Mais ce n'est pas la méthode conseillée pour un fichier simple comme celui-ci, sauf si le format est imprévisible.

  8. #8
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

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

    Informations forums :
    Inscription : Février 2006
    Messages : 12 815
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par didoalilo Voir le message
    est ce que peux faire ce code en pandas dataframe comme ca:
    df=tuple(x.split(" ")[0] for x in df['Colone'])
    Si df['Colone'] possède les propriétés d'un itérable alors oui. Et pourquoi tu n'essayes pas?
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  9. #9
    Membre actif
    Inscrit en
    Août 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 41
    Par défaut
    voila en details:
    j'ai importé un fichier xls qui contient des dates avec des lettres:
    Nom : liste.png
Affichages : 788
Taille : 8,7 Ko
    j'ai fait ce code
    Nom : code.png
Affichages : 777
Taille : 3,9 Ko
    j'ai reçu ce resultat
    Nom : res.png
Affichages : 792
Taille : 7,5 Ko
    tandisque je veux extraire que les chiffre avec les slash et tiret pour traiter apres les dates moi même
    merci d'avance.
    Images attachées Images attachées   

  10. #10
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 049
    Par défaut
    Il existe une méthode en pandas permettant de gérer ta première ligne avec to_datetime.

    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
    import pandas as pd
     
     
    data = (
        "12/03/86",
        "11/01/1978 برج الغدير",
        "19/12/1978 عنابة",
        "20/04/1971 عنابة",
        "12/06/1962 عنابة",
        "07/01/1978 قسنطينة",
        "12/06/1965 واد زناتي",
        "31/08/1989 سوق أهراس",
        "01/04/1988 عنابة",
        "02/07/1974 لخضارة",
        "04/01/1977 عنابة",
        "10/08/1987 toto",
    )
     
     
    df = pd.DataFrame(data, columns=['input'])
     
    df['date'] = df['input'].str.extract(r'(\d{1,2}/\d{1,2}/\d{2,4})')
     
    df['date'] = pd.to_datetime(df['date'], dayfirst=True).dt.strftime('%d/%m/%Y')
     
    print(df['date'])

  11. #11
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

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

    Informations forums :
    Inscription : Février 2006
    Messages : 12 815
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par didoalilo Voir le message
    j'ai importé un fichier xls qui contient des dates avec des lettres:
    Ouais, et les dates sont parfois avec des slashes, parfois avec des tirets!!!
    Nom : liste.png
Affichages : 779
Taille : 15,1 Ko
    Tu ne voudrais pas d'abord mettre ton fichier de départ au carat? C'est souvent la meilleure des choses à faire au lieu de devoir ensuite gérer tout et n'importe quoi...

    Citation Envoyé par didoalilo Voir le message
    Citation Envoyé par didoalilo Voir le message
    je veux repmlacer les lettres en blonc et garder que les chiffres avec slash
    tandisque je veux extraire que les chiffre avec les slash et tiret...
    Et en plus tu changes tes contraintes en cours de route!!!
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  12. #12
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 049
    Par défaut
    Citation Envoyé par Sve@r
    Et en plus tu changes tes contraintes en cours de route!!!
    Fallait s'y attendre, il est rare, même dans le monde professionnel où une demande n'est pas élargie, modifiée voir même supprimée... Le PO ne déroge pas à la règle ! Cependant, sur une demande où les cas de figures sont peu nombreux comme l'est le formatage de date, il aurait été logique d'avoir tout ces cas dès le premier post.

    C'est d'ailleurs pour cela que j'avais présenté dès ma 1ère réponse une solution prenant tous les cas, à force sur les forums tu t'habitues à prévoir ce genre de changement, en plus avec le module dateutil, ça s'y prettait plutôt bien


    @didoalilo
    Il est possible de le faire avec pandas, mais la solution avec expression régulière me semble bien plus complexe que ma solution de départ, je suis pas certains que se soit la meilleure solution

    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
    import pandas as pd
    data = (
        "12/03/86",
        "11/01/1978 برج الغدير",
        "19/12/1978 عنابة",
        "20/04/1971 عنابة",
        "12/06/1962 عنابة",
        "07/01/1978 قسنطينة",
        "12/06/1965 واد زناتي",
        "31/08/1989 سوق أهراس",
        "01/04/1988 عنابة",
        "02/07/1974 لخضارة",
        "04/01/1977 عنابة",
        "10/08/1987 toto",
        "15-05-89",
        "23-10-1995 عنابة",
    )
     
    df = pd.DataFrame(data, columns=['input'])
     
    df['date'] = df['input'].str.extract(r'(\d{1,2}(?:\/|-)\d{1,2}(?:\/|-)(?:\d{2}|\d{4}))')
    df['date'] = pd.to_datetime(df['date'], dayfirst=True, errors='coerce').dt.strftime('%d/%m/%Y')
     
    print(df['date'])
    Imaginions que l'on prenne la version anglaise de date, on aurait encore à modifier l'expression régulière.

    ------------------------------

    Proposition qui je pense va mettre d'accord les deux mondes, utiliser la fonction extract_dates dans ta dataframe en utilisant apply.

    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
    import pandas as pd
    from dateutil.parser import parse
     
    def extract_date(x):
        try:
            date_string = parse(x, fuzzy=True)
        except ValueError:
            return None
        return date_string.strftime('%d/%m/%Y')
     
    data = (
        "12/03/86",
        "11/01/1978 برج الغدير",
        "19-12-1978 عنابة",
        "20/04/1971 عنابة",
        "12/06/1962 عنابة",
        "07/01/1978 قسنطينة",
        "12/06/1965 واد زناتي",
        "31/08/1989 سوق أهراس",
        "01/04/1988 عنابة",
        "02/07/1974 لخضارة",
        "04/01/1977 عنابة",
        "10/08/1987 toto",
        "96-10-25 test_anglais",
        "2008-11-28 autres tests anglais"
    )
     
    df = pd.DataFrame(data, columns=['input'])
    df['date'] = df['input'].apply(extract_date)
     
    print(df)

  13. #13
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 193
    Par défaut
    hello,
    il y a un truc louche dans l'exécution de ton code fred : il a tendance à inverser le mois et le jour

  14. #14
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 049
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    hello,
    il y a un truc louche dans l'exécution de ton code fred : il a tendance à inverser le mois et le jour
    sur quelle version ?

    EDIT : Sur mes tests je ne vois rien d'inversé... peux-tu me préciser la data qui ne passe pas stp ?

  15. #15
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 193
    Par défaut
    voilà ce que j'obtiens avec ton dernier code en python 3.10 :
    input date
    0 12/03/86 03/12/1986
    1 11/01/1978 برج الغدير 01/11/1978
    2 19-12-1978 عنابة 19/12/1978
    3 20/04/1971 عنابة 20/04/1971
    4 12/06/1962 عنابة 06/12/1962
    5 07/01/1978 قسنطينة 01/07/1978
    6 12/06/1965 واد زناتي 06/12/1965
    7 31/08/1989 سوق أهراس 31/08/1989
    8 01/04/1988 عنابة 04/01/1988
    9 02/07/1974 لخضارة 07/02/1974
    10 04/01/1977 عنابة 01/04/1977
    11 10/08/1987 toto 08/10/1987
    12 96-10-25 test_anglais 25/10/1996
    13 2008-11-28 autres tests anglais 28/11/2008

  16. #16
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    721
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 721
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    hello,
    il y a un truc louche dans l'exécution de ton code fred : il a tendance à inverser le mois et le jour
    Ce ne serait pas étonnant puisque ces strings Unicode doivent logiquement être en partie RTL (right to left)

  17. #17
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 193
    Par défaut
    avec l'option dayfirst à vrai c'est mieux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def extract_date(x):
        try:
            date_string = parse(x, fuzzy=True, dayfirst=True)
        except ValueError:
            return None
        return date_string.strftime('%d/%m/%Y')

  18. #18
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

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

    Informations forums :
    Inscription : Février 2006
    Messages : 12 815
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    voilà ce que j'obtiens avec ton dernier code en python 3.10 :
    Ca me semble assez normal. Puisque Fred retourne une date_string.strftime('%d/%m/%Y') elle est formatée pour être affichée jour/mois/année.
    Ce qu'il y a en revanche c'est être sûr de comment elle est analysée en entrée via la fonction parse(). Un 03/05 est-il traité comme un 3 mai ou un 5 mars? La doc de parser est assez explicite à ce sujet.

    Citation Envoyé par jurassic pork Voir le message
    avec l'option firstDay à vrai c'est mieux :
    Ah ben ça y est, tu l'as vu avant moi
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  19. #19
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 049
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    voilà ce que j'obtiens avec ton dernier code en python 3.10 :
    Si tu copies colle le résultat effectivement, j'ai la même chose, mais par contre dans ma dataframe, tout est corrects avec ma colonne date et ma colonne input.

    voici le contenu de ma colonne date,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    0     03/12/1986
    1     01/11/1978
    2     19/12/1978
    3     20/04/1971
    4     06/12/1962
    5     01/07/1978
    6     06/12/1965
    7     31/08/1989
    8     04/01/1988
    9     07/02/1974
    10    01/04/1977
    11    08/10/1987
    12    25/10/1996
    13    28/11/2008
    et ma colonne input

    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
     
    0                            12/03/86               
    1                    11/01/1978 برج الغدير
    2                    19-12-1978 عنابة
    3                    20/04/1971 عنابة
    4                    12/06/1962 عنابة
    5                  07/01/1978 قسنطينة
    6                12/06/1965 واد زناتي
    7                31/08/1989 سوق أهراس
    8                    01/04/1988 عنابة
    9                   02/07/1974 لخضارة
    10                   04/01/1977 عنابة
    11                    10/08/1987 toto
    12              96-10-25 test_anglais
    13    2008-11-28 autres tests anglais
    EDIT: Ah ça y est, j'ai pigé, oui effectivement j'ai bien zappé le paramètre dayfirst

  20. #20
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 696
    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 696
    Par défaut
    Citation Envoyé par didoalilo Voir le message
    j'ai importé un fichier xls qui contient des dates avec des lettres
    Un fichier Excel "bien formé" a des colonnes typées: entiers, date,...

    Si c'est du texte dans lequel on mélange tout: pas la peine d'utiliser Excel!

    Après on peut très bien avoir un fichier Excel avec une colonne contenant des dates affichées sous différents format (11-04-2023 ou 2023-11-04 ou 4/11/23...): lorsqu'on lira la colonne avec pandas.read_excel, ça ne posera aucun problème (car on récupère la valeur interne de la date qui est un nombre flottant).

    Et si vous partez d'un fichier Excel tout pourri, il faut faire le ménage avant.
    On pourra trouver des solutions pour gérer un certain nombre de cas prédéfinis, difficile de prédire le résultat si on sort de ces cas là: au mieux le programmer plante, au pire, il récupère des données erronées.

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

Discussions similaires

  1. Réponses: 13
    Dernier message: 22/10/2012, 12h08
  2. Enlever les caractères de bourrages
    Par boux2 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 11/07/2006, 12h07
  3. [C#][ADO] Enlever les caractère spéciaux
    Par Oberown dans le forum Windows Forms
    Réponses: 3
    Dernier message: 10/01/2005, 18h38

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