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 :

Caractère d'échappement dans champ de colonne [Python 3.X]


Sujet :

Python

  1. #1
    Membre régulier
    Profil pro
    Pôle Etude et Automatisation
    Inscrit en
    Avril 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Pôle Etude et Automatisation
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2007
    Messages : 166
    Points : 100
    Points
    100
    Par défaut Caractère d'échappement dans champ de colonne
    Bonjour,

    Je n'arrive pas à échapper le tiret dans la formule suivante (BSEG-DMBTR):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    df = df.assign(Somme = lambda x: round(x.BSEG-DMBTR,2) * x.Code.replace({'H' : 1, 'S' : -1}))
    BSEG-DMBTR est un champ d’entête que je ne dois pas modifier.

    Merci
    Eric

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,


    Citation Envoyé par Eric_03 Voir le message
    BSEG-DMBTR est un champ d’entête que je ne dois pas modifier.
    BSEG-DMBTR pourrait être une chaine de caractères... mais x.BSEG-DMBTR soustrait la variable DMBTR à l'attribut BSEG de l'objet x.

    Reste à donner un peu d'éclairage sur ce que vous voulez faire car parti comme çà, on ne sait pas trop.

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

  3. #3
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 950
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 950
    Points : 9 279
    Points
    9 279
    Par défaut
    hello,
    ma boule de cristal m'a indiqué qu'il se pourrait que tu nous parles de dataframes pandas . Dans ce cas au lieu d'utiliser une fonction lambda tu pourrais peut-être (suivant la complexité de l'opération) utiliser un référencement direct à une série ou une séquence.
    Voici un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    import pandas as pd
    df = pd.DataFrame({'temp-c': [17.0, 25.0]},
                      index=['Portland', 'Berkeley'])             
    print(df)
    print(df.assign(temp_f=df['temp-c'] * 9 / 5 + 32))
    résultat :
    >>> temp-c
    Portland 17.0
    Berkeley 25.0
    temp-c temp_f
    Portland 17.0 62.6
    Berkeley 25.0 77.0
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  4. #4
    Membre régulier
    Profil pro
    Pôle Etude et Automatisation
    Inscrit en
    Avril 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Pôle Etude et Automatisation
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2007
    Messages : 166
    Points : 100
    Points
    100
    Par défaut
    Merci,

    Il s'agit bien de Pandas

    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
     
    import tarfile
    import pandas as pd
     
    with tarfile.open('D:/EE/EE.tar.gz', 'r:*') as tar:
     
        for n in tar.getnames():
     
            if n.endswith('.TXT'):
     
                try:
     
                    df = pd.read_fwf(tar.extractfile(n),colspecs=resultNumCar, header=None, names=oooName,encoding="utf_8_sig")            
     
                    df = df.assign(Somme = lambda x: round(x.BSEG-DMBTR,2) * x.Code.replace({'H' : 1, 'S' : -1}))
     
                    sansStatut = pd.isnull(df["BKPF-BSTAT"])
     
                    nom = n.replace(".TXT",".csv")
     
                    filename = 'C:/Users/Notebook/data/' + nom
     
                    df[sansStatut].loc[:,['BKPF-BUKRS','BSEG-HKONT','Somme']].to_csv(filename,index=False)
     
                except pd.errors.EmptyDataError:
     
                    continue
    Les valeurs de la colonne BSEG-DMBTR du dataframe sont multipliées par -1 selon certaines conditions pour être ensuite additionnées. Lorsque l'entête est constituée dans seul tenant comme dans code x.Code.replace (code est aussi une entête)cela fonctionne correctement.

    Je teste ta suggestion jurassic

    Eric

  5. #5
    Membre régulier
    Profil pro
    Pôle Etude et Automatisation
    Inscrit en
    Avril 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Pôle Etude et Automatisation
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2007
    Messages : 166
    Points : 100
    Points
    100
    Par défaut
    La modification des noms des champs est finalement acceptée

    J'ai donc modifié ma liste

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    oooName = my_dataframe[0].to_list()
    our_list =[]
    for signe in oooName:
        our_list.append(signe.replace("-","_"))
    Merci
    Eric

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 10/05/2014, 16h19
  2. Caractère d'échappement dans une shell complex
    Par trungsi dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 17/03/2010, 16h57
  3. Caractère d'échappement dans une requête ?
    Par RudyWI dans le forum VBA Access
    Réponses: 4
    Dernier message: 23/04/2008, 22h26
  4. Caractères dans champ
    Par Sebmox dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 11/05/2006, 11h47
  5. Réponses: 1
    Dernier message: 04/11/2005, 15h26

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