Je souhaite remplacer certaines valeurs de mon dataframe qui ont été saisies dans le mauvais format. Par exemple, 850 / 07-498745 doit être 07-498745. Maintenant, j'ai utilisé la division de chaîne avec succès pour le faire. Cependant, il transforme toutes les chaînes précédemment correctement formatées en NaN. J'ai essayé de le baser sur une condition, mais j'ai toujours le même problème. Comment puis-je résoudre ce problème?
Exemple d'entrée:
df['mycolumn'] = df[df.mycolumn.str.contains('/') == True].mycolumn.str.split('/', 1).str[1] df
Ma tentative:
mylist = ['850/07-498745', '850/07-148465', '07-499015'] df = pd.DataFrame(mylist) df.rename(columns={ df.columns[0]: "mycolumn" }, inplace = True)
Sortie: p >
Ce que je voulais:
3 Réponses :
Vous pouvez utiliser split
avec /
et récupérer la dernière chaîne de retour de la liste:
df['mycolumn'].str.split('/').str[-1] 0 07-498745 1 07-148465 2 07-499015 Name: mycolumn, dtype: object
Pour une solution regex:
0 07-498745 1 07-148465 2 07-499015 Name: 0, dtype: object
Sortie:
df.mycolumn.str.extract('(?:.*/)?(.*)$')[0]
Cela fonctionnerait également et pourrait vous aider à comprendre pourquoi votre tentative initiale n'a pas fonctionné:
mask = df.mycolumn.str.contains('/') df.mycolumn.loc[mask] = df.mycolumn[mask].str.split('/', 1).str[1]
Vous faisiez df ['mycolumn'] = ... code >, qui, je crois, ne fait que remplacer la série entière de cette colonne par la nouvelle que vous avez formée.
Suivant votre logique, ce serait:
df.loc [df.mycolumn.str.contains ('/'), 'mycolumn'] = df.mycolumn.str.split ('/'). Str [1]
. Mais dans ce cas, la réponseanky_91
a plus de sens.