web-dev-qa-db-fra.com

Extrait int de la ficelle des pandas

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?

9
user5739619

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)
39
Lokesh A. R.

En supposant qu'il y ait toujours exactement une lettre en tête

df['B'] = df['B'].str[1:].astype(int)
2
Mike Graham

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. 

0
boesjes

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
0
Kohn1001