2013-07-30 38 views
46

Tôi mới bắt đầu làm việc với gấu trúc. Tôi có một khung dữ liệu trong gấu trúc với các cột dữ liệu int và str hỗn hợp. Tôi muốn nối các cột đầu tiên trong khung dữ liệu, để làm điều đó, tôi phải chuyển đổi cột int thành str. tôi đã cố gắng để làm điều đó như thế:Chuyển đổi cột trong khung dữ liệu gấu trúc từ int thành chuỗi

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

hay như thế

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

nhưng trong cả hai trường hợp nó không làm việc và tôi nhận được một lỗi nói rằng "không thể nối 'str' và 'int' objects ". Concat cho hai cột str đang hoạt động hoàn hảo.

Bất kỳ trợ giúp nào sẽ được đánh giá rất nhiều! Cảm ơn!

+0

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

Trả lời

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 

Chuyển đổi một loạt

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' 

chuyển đổi toàn bộ khung

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

Tôi thực sự không hiểu tại sao, nhưng mtrx ['X.3']. Áp dụng (str) không hoạt động cho tôi hoặc: (dtype vẫn hiển thị int64. Dataframe cho hàng 23177 và cột X.3 chỉ có số. Trong [21]: mtrx ['X.3']. dtype Ra [21]: dtype ('int64') – Malfet

+0

gấu trúc phiên bản nào? – Jeff

+0

0.7.0, đi kèm với python 2.7 trên hệ thống Ubuntu – Malfet

40

Thay đổi kiểu dữ liệu của cột DataFrame:

Để int:

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

Để str:

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

+2

Điều này là hấp dẫn, nhưng nó là khoảng 4x chậm hơn 'áp dụng (str)' từ @ Jeff, trong thử nghiệm của tôi bằng cách sử dụng 'pd.Series (np.arange (1000000))'. –

+1

Điều này phù hợp với tôi. 'df ['A'] = df ['A']. Áp dụng (str)' cũng hoạt động. Câu trả lời được cung cấp bởi @Jeff không hoạt động đối với tôi. –

6

Cảnh báo: Cả hai giải pháp cho ( astype() và áp dụng() ) không giữ gìn các giá trị NULL trong một trong hai nan hoặc các hình thức 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() 

Tôi tin rằng đây là cố định bởi việc thực hiện to_string()