J'ai donc un ensemble de données avec plus de 500 lignes où l'une des colonnes a des valeurs comme celle-ci:

Df:

         column1

 0    a{'...'}  
 1    b{'...'}
 2    c{'...'}  
 3    d{'...'}  

Je souhaite supprimer tout ce qui se trouve à l'intérieur, y compris le {}.

J'ai regardé cette question, Pandas supprimer des parties de chaîne après le caractère spécifié dans une trame de données et j'ai essayé les solutions là-bas, mais je continue à recevoir des erreurs (et je suis conscient que StringIO est maintenant io.StringIO).

J'ai essayé

df.column1 = df.column1.str.split('{')[0]

Mais obtenez le message d'erreur: KeyError: 0 et ne comprenez pas vraiment ce que cela signifie

J'ai aussi essayé:

df.column1 = df.column1.str.split(pat='{')

Mais cela ne semble supprimer le «{», donc je me retrouve avec

      column1

 0    a'...'}   
 1    b'...'}
 2    c'...'}   
 3    d'...'}   

De plus, je ne sais pas si c'est important, mais la colonne est de type object. Quelqu'un peut-il me dire ce que je fais mal et comment résoudre le problème ???

3
Aongoose 13 avril 2018 à 18:17

4 réponses

Meilleure réponse

Vous pouvez utiliser replace

df['column1'].str.replace(r"\{.*\}","")
Out[385]: 
0    a
1    b
2    c
3    d
Name: column1, dtype: object
5
YOBEN_S 13 avril 2018 à 15:22

Vous pouvez également utiliser pandas.DataFrame.replace et passer un dictionnaire qui spécifie ce qu'il faut faire pour différentes colonnes.

Utilisation du modèle d'expression régulière de @ Wen

df.replace(dict(column1={'\{.*\}': ''}), regex=True)

  column1
0       a
1       b
2       c
3       d

Dans l'esprit de @pault, vous pouvez également utiliser pandas.Series.str.extract

df.column1.str.extract('([^\{]+)', expand=False)

  column1
0       a
1       b
2       c
3       d
3
piRSquared 13 avril 2018 à 16:24

Un peu tard (la solution de @ Wen est excellente), mais vous pouvez utiliser pandas.Series.str.split() comme dans votre tentative d'origine. Vous étiez proche, il vous suffit de définir expand=True.

df["column1"] = df["column1"].str.split("{", expand=True)[0]
#  column1
#0       a
#1       b
#2       c
#3       d
2
pault 13 avril 2018 à 15:46

Utilisation de .apply

df = pd.DataFrame({"a":["a{'...'}", "b{'...'}"]})
df["a"] = df["a"].apply(lambda x: x.split('{')[0])
print df
0
Rakesh 13 avril 2018 à 15:26