web-dev-qa-db-fra.com

ajoutez un préfixe de chaîne à chaque valeur d'une colonne de chaîne à l'aide de Pandas

Je voudrais ajouter une chaîne au début de chaque valeur dans une colonne d'un pandas dataframe (avec élégance). J'ai déjà compris comment le faire, et j'utilise actuellement :

df.ix[(df['col'] != False), 'col'] = 'str'+df[(df['col'] != False), 'col']

Cela semble être une chose inélégante à faire - connaissez-vous un autre moyen (qui ajoute peut-être aussi le caractère à des lignes où cette colonne est 0 ou NaN)?

Au cas où cela ne serait pas encore clair, je voudrais tourner:

    col 
1     a
2     0

dans:

       col 
1     stra
2     str0
71
TheChymera
df['col'] = 'str' + df['col'].astype(str)

Exemple:

>>> df = pd.DataFrame({'col':['a',0]})
>>> df
  col
0   a
1   0
>>> df['col'] = 'str' + df['col'].astype(str)
>>> df
    col
0  stra
1  str0
147
Roman Pekar

En guise d'alternative, vous pouvez également utiliser un apply associé à format que je trouve légèrement plus lisible si on le fait, par exemple. souhaite également ajouter un suffixe ou manipuler l'élément lui-même:

df = pd.DataFrame({'col':['a', 0]})

df['col'] = df['col'].apply(lambda x: "{}{}".format('str', x))

qui donne également le résultat souhaité:

    col
0  stra
1  str0

Si vous utilisez Python 3.6+, vous pouvez également utiliser des chaînes de caractères f:

df['col'] = df['col'].apply(lambda x: f"str{x}")

donnant le même résultat.

La version f-string est presque aussi rapide que la solution de @ RomanPekar (python 3.6.4):

df = pd.DataFrame({'col':['a', 0]*200000})

%timeit df['col'].apply(lambda x: f"str{x}")
117 ms ± 451 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

%timeit 'str' + df['col'].astype(str)
112 ms ± 1.04 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

L'utilisation de format est cependant beaucoup plus lente:

%timeit df['col'].apply(lambda x: "{}{}".format('str', x))
185 ms ± 1.07 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
8
Cleb

Si vous chargez votre fichier de table avec dtype=str
ou convertir le type de colonne en chaîne df['a'] = df['a'].astype(str)
alors vous pouvez utiliser une telle approche:

df['a']= 'col' + df['a'].str[:]

Cette approche permet la chaîne de préfixe, d’ajout et de sous-ensemble de df.
Fonctionne sur Pandas v0.23.4, v0.24.1. Je ne connais pas les versions antérieures.

2
Vasyl Vaskivskyi