166 votes

Conversion d'une colonne dans un cadre de données pandas, de l'int à la chaîne.

J'ai un cadre de données dans pandas avec des colonnes de données mixtes (int et str). Je veux d'abord concaténer les colonnes dans le cadre de données. Pour ce faire, je dois convertir un fichier int colonne à str . J'ai essayé de faire comme suit :

mtrx['X.3'] = mtrx.to_string(columns = ['X.3'])

o

mtrx['X.3'] = mtrx['X.3'].astype(str)

mais dans les deux cas, cela ne fonctionne pas et je reçois une erreur disant "cannot concatenate 'str' and 'int' objects". Concaténation de deux str Les colonnes fonctionnent parfaitement bien.

190voto

Jeff Points 27612
In [16]: df = DataFrame(np.arange(10).reshape(5,2),columns=list('AB'))

In [17]: df
Out[17]: 
   A  B
0  0  1
1  2  3
2  4  5
3  6  7
4  8  9

In [18]: df.dtypes
Out[18]: 
A    int64
B    int64
dtype: object

Convertir une série

In [19]: df['A'].apply(str)
Out[19]: 
0    0
1    2
2    4
3    6
4    8
Name: A, dtype: object

In [20]: df['A'].apply(str)[0]
Out[20]: '0'

N'oubliez pas de renvoyer le résultat :

df['A'] = df['A'].apply(str)

Convertir l'ensemble du cadre

In [21]: df.applymap(str)
Out[21]: 
   A  B
0  0  1
1  2  3
2  4  5
3  6  7
4  8  9

In [22]: df.applymap(str).iloc[0,0]
Out[22]: '0'

df = df.applymap(str)

132voto

tanaque Points 1191

Change le type de données de la colonne DataFrame :

A l'intérieur :

df.column_name = df.column_name.astype(np.int64)

Pour str :

df.column_name = df.column_name.astype(str)

23voto

Keith Points 1575

Avertissement : Les deux solutions sont données ( astype() et apply() ) ne préservent pas les valeurs NULL, que ce soit sous la forme nan ou None.

import pandas as pd
import numpy as np

df = pd.DataFrame([None,'string',np.nan,42], index=[0,1,2,3], columns=['A'])

df1 = df['A'].astype(str)
df2 =  df['A'].apply(str)

print df.isnull()
print df1.isnull()
print df2.isnull()

Je pense que ce problème est résolu par l'implémentation de to_string()

18voto

Govinda Points 529

Il existe quatre façons de convertir des colonnes en chaînes de caractères

1. astype(str)
df['column_name'] = df['column_name'].astype(str)

2. values.astype(str)
df['column_name'] = df['column_name'].values.astype(str)

3. map(str)
df['column_name'] = df['column_name'].map(str)

4. apply(str)
df['column_name'] = df['column_name'].apply(str)

Voyons les performances de chaque type

#importing libraries
import numpy as np
import pandas as pd
import time

#creating four sample dataframes using dummy data
df1 = pd.DataFrame(np.random.randint(1, 1000, size =(10000000, 1)), columns =['A'])
df2 = pd.DataFrame(np.random.randint(1, 1000, size =(10000000, 1)), columns =['A'])
df3 = pd.DataFrame(np.random.randint(1, 1000, size =(10000000, 1)), columns =['A'])
df4 = pd.DataFrame(np.random.randint(1, 1000, size =(10000000, 1)), columns =['A'])

#applying astype(str)
time1 = time.time()
df1['A'] = df1['A'].astype(str)
print('time taken for astype(str) : ' + str(time.time()-time1) + ' seconds')

#applying values.astype(str)
time2 = time.time()
df2['A'] = df2['A'].values.astype(str)
print('time taken for values.astype(str) : ' + str(time.time()-time2) + ' seconds')

#applying map(str)
time3 = time.time()
df3['A'] = df3['A'].map(str)
print('time taken for map(str) : ' + str(time.time()-time3) + ' seconds')

#applying apply(str)
time4 = time.time()
df4['A'] = df4['A'].apply(str)
print('time taken for apply(str) : ' + str(time.time()-time4) + ' seconds')

Sortie

time taken for astype(str): 5.472359895706177 seconds
time taken for values.astype(str): 6.5844292640686035 seconds
time taken for map(str): 2.3686647415161133 seconds
time taken for apply(str): 2.39758563041687 seconds

Si vous vous exécutez plusieurs fois, le temps de chaque technique peut varier. En moyenne map(str) y apply(str) sont moins longues que les deux autres techniques

16voto

Faraz Ramtin Points 35

Utilisez le code suivant :

df.column_name = df.column_name.astype('str')

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X