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 :

changer une valeur dans une selection d'une series Pandas


Sujet :

Calcul scientifique Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Consultant MOA
    Inscrit en
    Août 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant MOA

    Informations forums :
    Inscription : Août 2017
    Messages : 8
    Points : 4
    Points
    4
    Par défaut changer une valeur dans une selection d'une series Pandas
    Bonjour,

    J'ai besoin de changer des valeurs dans une sous-section d'une series pandas
    Pour simplifier mon problème. J'ai considéré une series pandas contenant une seule valeur 1 et le reste est nul. Je voulais remplacer cette valeur par 3. A mon sens, je dois faire

    Ca ne marche pas. J'ai aussi essayé d'autres manières comme iloc, values, mais ça ne marche pas non plus.

    Il y a t'il quelqu'un qui peut m'aider svp?

  2. #2
    Membre actif
    Profil pro
    Loisir
    Inscrit en
    Novembre 2011
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Loisir

    Informations forums :
    Inscription : Novembre 2011
    Messages : 159
    Points : 284
    Points
    284
    Par défaut
    Bonjour,

    Python se veut "simple" Essayez de faire encore plus simple comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    import pandas as pd
     
    a = pd.Series([0,1,1,0,0,0])
    a[a == 1] = 3

  3. #3
    Candidat au Club
    Homme Profil pro
    Consultant MOA
    Inscrit en
    Août 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant MOA

    Informations forums :
    Inscription : Août 2017
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    My bad, vous avez raison! J'ai trop simplifié mon problème.

    Moi, j'ai une Dataframe res qui contient plusieurs series A, B, C... et je veux changer des valeurs de quelques éléments de 'C'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for i in I:
        res[(res.A == x) & (res.B == y)]['C'].iat[i]= z
    Voilà, un exemple qui explique mieux ce qui me bloque

    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
    a = pd.Series([0,1,1,0,0,0])
     
    b = pd.Series([0,3,1,0,2,0])
     
    c = pd.Series([4,12,1,0,7,10])
     
    d = {'A':a,'B':b,'C':c}
     
    df = pd.DataFrame(data = d)
     
    # changer la première valeur de 'C' où 'A' et 'B' = 1
    df[(df.A == 1) & (df.B == 1)].C.iat[0] = 3
    # ne change pas df
     
    # changer toutes valeurs de 'C' où 'A' et 'B' = 1
    df[(df.A == 1) & (df.B == 1)].C = 3 
    # A value is trying to be set on a copy of a slice from a DataFrame.
    # Try using .loc[row_indexer,col_indexer] = value instead
     
    # changer la première valeur de 'C' où 'A' et 'B' = 1
    df[(df.A == 1) & (df.B == 1)].C .iloc[0]= 3
    #A value is trying to be set on a copy of a slice from a DataFrame.
    #Try using .loc[row_indexer,col_indexer] = value instead

  4. #4
    Membre actif
    Profil pro
    Loisir
    Inscrit en
    Novembre 2011
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Loisir

    Informations forums :
    Inscription : Novembre 2011
    Messages : 159
    Points : 284
    Points
    284
    Par défaut
    Les retours sont tout à fait normaux et python vous dit exactement quelle est votre erreur :
    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
    import pandas as pd
     
    a = pd.Series([0,1,1,0,0,0,1])
     
    b = pd.Series([0,3,1,0,2,0,1])
     
    c = pd.Series([4,12,1,0,7,10,1])
     
    d = {'A':a,'B':b,'C':c}
     
    df = pd.DataFrame(data = d)
     
     
    # changer toutes valeurs de 'C' où 'A' et 'B' = 1
    df.C[(df.A == 1) & (df.B == 1)] = 3
    df 
     
    # changer la première valeur de 'C' où 'A' et 'B' = 1
    df.C[df.C[(df.A == 1) & (df.B == 1)].idxmin()] = 3
    df
    Ce n'est pas évident au début mais il faut chercher à comprendre la signification des warnings et des messages d'erreur même si dans votre cas ils n'aident que lorsqu'on sait où chercher.

Discussions similaires

  1. [XL-2000] Remplir une valeur dans cellule à partir d'une valeur precise d'un fichier texte
    Par cactus666 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 26/01/2010, 10h31
  2. selection d'une valeur dans <html:select>
    Par singleProject dans le forum Struts 1
    Réponses: 2
    Dernier message: 08/07/2008, 17h24
  3. [Interbase] Récupérer une valeur dans un select
    Par ftoutin dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 09/01/2007, 13h36
  4. récupérer une valeur dans un selected
    Par lacfab dans le forum Langage
    Réponses: 6
    Dernier message: 14/12/2005, 09h48
  5. Selection d'une valeur dans une autre table
    Par beurnoir dans le forum Access
    Réponses: 1
    Dernier message: 13/10/2005, 12h02

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