J'ai un dataframe avec la colonne suivante:

A
+
+
-
+
-

Comment convertir cette colonne en valeurs entières. Pour que je puisse le multiplier en d'autres valeurs numériques?

Par conséquent, tous les «+» seraient remplacés par 1 et «-» par -1.

4
A.DS 23 mai 2018 à 19:12

5 réponses

Meilleure réponse

Vous pouvez utiliser:

df.A = df.A.map({'+': 1, '-': -1})
9
llllllllll 23 mai 2018 à 16:15

Certaines façons possibles peuvent utiliser add pour ajouter une chaîne de 1 et convertir en int avec astype:

df['A'] = df.A.add('1').astype(int)

Ou en utilisant lambda dans le même but que ci-dessus:

df['A'] = df.A.apply(lambda row: int(row + '1'))
3
student 23 mai 2018 à 16:18

Si je comprends bien, vous pouvez simplement utiliser {{X0} }:

>>> df
   A
0  +
1  +
2  -
3  +
4  -

new_df = df.replace({'A':{'+':1, '-':-1}})

>>> new_df
   A
0  1
1  1
2 -1
3  1
4 -1
6
sacuL 23 mai 2018 à 16:15

searchsorted

df.assign(A=1 - np.array(['+']).searchsorted(df.A) * 2)

   A
0  1
1  1
2 -1
3  1
4 -1

Succincte

df.assign(A=df.A.eq('-').mul(2).rsub(1))

   A
0  1
1  1
2 -1
3  1
4 -1
3
piRSquared 23 mai 2018 à 16:46

En utilisant appliquer:

suppose que seules les valeurs + et - sont dans la colonne

df['A'] = df.A.apply(lambda x: 1 if x == '+' else -1)

En utilisant la concaténation et le casting de chaînes:

df['A'] = (df.A + '1').astype(int)

En utilisant l'égalité des chaînes et le casting:

df['A'] = (df.A == '+').astype(int)*2-1
6
Haleemur Ali 23 mai 2018 à 16:24