2013-07-30 12 views
46

Właśnie zaczynam pracować z pandami. Mam ramka danych w pand z mieszanych kolumn danych int i str. Chcę połączyć pierwsze kolumny w ramach danych, aby to zrobić, muszę przekonwertować kolumnę int na str. Próbowałem to zrobić tak:Konwertowanie kolumny w ramce danych pandy z int na ciąg znaków

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

lub jak ten

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

ale w obu przypadkach nie działa, a ja dostaję błąd mówiąc „nie można złączyć«str»i obiekty "int" ". Concat dla dwóch kolumn str działa idealnie dobrze.

Każda pomoc będzie bardzo ceniona! Dzięki!

+0

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

Odpowiedz

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 

Konwersja szereg

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' 

Konwersja Cała ramka

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

ja naprawdę nie rozumiem dlaczego, ale mtrx ['X.3']. apply (str) też nie działa dla mnie :(dtype nadal pokazuje int64, a ramka danych dla wiersza 23177 i X.3 ma tylko liczby. mtrx ['X.3']. dtype Out [21]: dtype ('int64') – Malfet

+0

jaka wersja pandy? – Jeff

+0

0.7.0, przyjdź z python 2.7 na systemie Ubuntu – Malfet

40

Zmieńtyp danych DataFrame kolumny:

int:

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

Aby str:

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

+2

To jest atrakcyjne, ale jest o 4x wolniejsze niż 'apply (str)' od @Jeff, w moim teście za pomocą 'pd.Series (np.arange (1000000))'. –

+1

To działa dla mnie. 'df ['A'] = df ['A']. apply (str)' również działa. Odpowiedź udzielona przez @Jeff nie działa dla mnie. –

6

Ostrzeżenie: Oba rozwiązania podane ( astype() i apply() ) nie zachowują wartości NULL ani w nan lub Brak formularza.

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

Wierzę, że ta jest ustalana przez realizację to_string()

Powiązane problemy