web-dev-qa-db-fra.com

Pandas: changer le type de données de la série en chaîne

J'utilise Pandas _ 'ver 0.12.0' avec Python 2.7 et j'ai un cadre de données comme ci-dessous:

df = pd.DataFrame({'id' : [123,512,'zhub1', 12354.3, 129, 753, 295, 610],
                    'colour': ['black', 'white','white','white',
                            'black', 'black', 'white', 'white'],
                    'shape': ['round', 'triangular', 'triangular','triangular','square',
                                        'triangular','round','triangular']
                    },  columns= ['id','colour', 'shape'])

La série id est composée de quelques entiers et de chaînes. Son dtype par défaut est object. Je veux convertir tout le contenu de id en chaînes. J'ai essayé astype(str), qui produit la sortie ci-dessous.

df['id'].astype(str)
0    1
1    5
2    z
3    1
4    1
5    7
6    2
7    6

1) Comment puis-je convertir tous les éléments de id en String?

2) J'utiliserai finalement id pour l'indexation de trames de données. Le fait d’avoir des index de chaîne dans une structure de données ralentirait-il les choses par rapport à un index entier?

43
Zhubarb

Vous pouvez convertir tous les éléments de id en str en utilisant apply

df.id.apply(str)

0        123
1        512
2      zhub1
3    12354.3
4        129
5        753
6        295
7        610

Edité par OP:

Je pense que le problème était lié à la version Python (2.7.), Qui a fonctionné:

df['id'].astype(basestring)
0        123
1        512
2      zhub1
3    12354.3
4        129
5        753
6        295
7        610
Name: id, dtype: object
71
Amit

Vous devez l'assigner, comme ceci: -

df['id']= df['id'].astype(str)
37
Rishil Antony

Personnellement, rien de ce qui précède n'a fonctionné pour moi. Qu'est-ce que:

new_str = [str(x) for x in old_obj][0]
1
Zachary Manesiotis