Disons que j’ai une structure de données df
comme
A B
1 V2
3 W42
1 S03
2 T02
3 U71
Je veux avoir une nouvelle colonne (soit à la fin de df
, soit remplacer la colonne B
par celle-ci, peu importe), qui extrait uniquement l'int de la colonne B
Je veux que la colonne C
ressemble à
C
2
42
3
2
71
Donc, s'il y a un 0 devant le numéro, comme pour 03, alors je veux retourner 3 et non 03
Comment puis-je faire ceci?
Vous pouvez convertir en chaîne et extraire le nombre entier à l'aide d'expressions régulières.
df['B'].str.extract('(\d+)').astype(int)
En supposant qu'il y ait toujours exactement une lettre en tête
df['B'] = df['B'].str[1:].astype(int)
J'ai écrit une petite boucle pour le faire, car je n'avais pas mes chaînes dans un DataFrame, mais dans une liste. De cette façon, vous pouvez également ajouter une petite instruction if pour prendre en compte les floats:
output= ''
input = 'whatever.007'
for letter in input :
try :
int(letter)
output += letter
except ValueError :
pass
if letter == '.' :
output += letter
sortie = float (sortie)
ou vous pouvez int (sortie) si vous voulez.
Préparer le DF pour avoir le même que le vôtre:
df = pd.DataFrame({'A': [1, 3, 1, 2, 3], 'B' : ['V2', 'W42', 'S03', 'T02', 'U71']})
df.head()
Maintenant, manipulez-le pour obtenir le résultat souhaité:
df['C'] = df['B'].apply(lambda x: re.search(r'\d+', x).group())
df.head()
A B C
0 1 V2 2
1 3 W42 42
2 1 S03 03
3 2 T02 02
4 3 U71 71