2013-07-30 2 views
46

Sto appena iniziando a lavorare con i panda. Ho un dataframe in panda con colonne di dati misti int e str. Voglio concatenare le prime colonne all'interno del dataframe, per farlo devo convertire la colonna int in str. Ho cercato di farlo in quel modo:Conversione di una colonna all'interno di dataframe panda da int a stringa

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

o come quello

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

ma in entrambi i casi non funziona e sto ottenendo un errore che dice "non può concatenare 'str' e 'oggetti int' ". Concat per due colonne str funziona perfettamente bene.

Qualsiasi aiuto sarebbe molto apprezzato! Grazie!

+0

http://stackoverflow.com/questions/22005911/convert-columns-to-string-in-pandas – kdauria

risposta

59
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 

Convertire una serie

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' 

convertire l'intero telaio

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' 
+2

Io davvero non capisco perché, ma mtrx ['X.3']. apply (str) non funziona nemmeno per me :(dtype mostra ancora int64.Il dataframe per la riga 23177 e X.3 ha ottenuto solo numeri. In [21]: mtrx ['X.3'] .dtype Out [21]: dtype ('int64') – Malfet

+0

quale versione panda? – Jeff

+0

0.7.0, fornito con python 2.7 su sistema Ubuntu – Malfet

40

Cambio tipo di dati di dataframe colonna:

INT:

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

Per str:

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

+2

Questo è attraente, ma è circa 4 volte più lento di 'apply (str)' da @Jeff, nel mio test usando 'pd.Series (np.arange (1000000))'. –

+1

Questo funziona per me. 'df ['A'] = df ['A']. apply (str)' funziona anche. La risposta fornita da @Jeff non funziona per me. –

6

Attenzione: Entrambe le soluzioni presentate ( astype() e applicare() ) non conservano valori NULL sia nel nan o nessun modulo.

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() 

Credo che questo è fissato dalla realizzazione di to_string()