2013-07-30 18 views
46

Ich fange gerade an, mit Pandas zu arbeiten. Ich habe einen Datenrahmen in Pandas mit gemischten int und str Datenspalten. Ich möchte die ersten Spalten innerhalb des Datenrahmens verketten, dazu muss ich int Spalte zu str konvertieren. Ich habe versucht, das wie das zu tun:Konvertieren einer Spalte innerhalb Pandas Dataframe von Int in String

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

oder wie die

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

aber in beiden Fällen funktioniert es nicht und ich erhalte eine Fehlermeldung „sagt, kann nicht verketten‚str‘und 'int' Objekte ". Concat für zwei str Spalten funktioniert einwandfrei.

Jede Hilfe würde sehr geschätzt werden! Vielen Dank!

+0

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

Antwort

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 

Konvertieren einer Reihe

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' 

der gesamte Rahmen Spalte

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

Ich verstehe nicht wirklich warum, aber mtrx ['X.3']. apply (str) funktioniert auch nicht für mich :(dtype zeigt immer noch int64 an. Der Datenrahmen für Zeile 23177 und Spalte X.3 hat nur Zahlen. In [21]: mtrx ['X.3']. dtype Aus [21]: dtype ('int64') – Malfet

+0

welche Version Pandas? – Jeff

+0

0.7.0, kommen mit Python 2.7 auf Ubuntu-System – Malfet

40

Datentyp ändern von Datenrahmen konvertieren:

in int:

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

Um str:

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

+2

Das ist ansprechend, aber es ist ungefähr 4x langsamer als 'apply (str)' von @Jeff, in meinem Test mit 'pd.Series (np.arange (1000000))'. –

+1

Das funktioniert für mich. 'df ['A'] = df ['A']. apply (str)' funktioniert auch. Die Antwort von @Jeff funktioniert nicht für mich. –

6

Warnung: Beide gegebenen Lösungen ( AsType() und apply() ) nicht beibehalten NULL-Werte entweder in der nan oder keine Form.

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

Ich glaube, das durch die Umsetzung von to_string()

Verwandte Themen