2014-03-06 197 views
13

變化數據類型我用熊貓「版本0.12.0」與Python 2.7,並有如下一個數據幀:熊貓:系列爲String

df = pd.DataFrame({'id' : [123,512,'zhub1', 12354.3, 129, 753, 295, 610], 
        'colour': ['black', 'white','white','white', 
          'black', 'black', 'white', 'white'], 
        'shape': ['round', 'triangular', 'triangular','triangular','square', 
             'triangular','round','triangular'] 
        }, columns= ['id','colour', 'shape']) 

id系列包括一些整數和字符串。其dtype默認爲object。我想將id的所有內容轉換爲字符串。我試過astype(str),它產生下面的輸出。

df['id'].astype(str) 
0 1 
1 5 
2 z 
3 1 
4 1 
5 7 
6 2 
7 6 

1)我怎麼能轉換爲字符串的id所有元素?

2)我最終將使用id來索引數據幀。與具有整數索引相比,數據框中的字符串索引是否會減慢速度?

+1

不知道爲什麼你得到輸出'astype'正常工作對我來說,至少在0.13.1版本,也許0.12.0有一個bug?在回答你的第二點,是的,它很可能是作爲字符串比較慢不會超過整數比較快,但我會第一資料這個,也這取決於 – EdChum

+0

你設置欄的大小,對不對? DF [「身份證」] = DF [「身份證」。astype(STR) –

+0

@Andy海登,是我做的任命,但它是我認爲是意外的輸出。 – Rhubarb

回答

34

您可以使用OP apply

df.id.apply(str) 

0  123 
1  512 
2  zhub1 
3 12354.3 
4  129 
5  753 
6  295 
7  610 

編輯ID的所有元素轉換爲str

我認爲這個問題是有關Python版本(2.7),這樣的工作:

df['id'].astype(basestring) 
0  123 
1  512 
2  zhub1 
3 12354.3 
4  129 
5  753 
6  295 
7  610 
Name: id, dtype: object 
+1

謝謝你,我會嘗試這個時候我旁邊的一臺電腦和接受你的答案。你知道爲什麼'astype(str)'不起作用嗎? – Rhubarb

+0

@Zhubarb - 我只是嘗試了,我得到相同的結果與'DF [「身份證」] astype(STR)' – Amit

+0

我的評論(不需要)相同的結果,或者你用'df.id.得到的結果。 apply(str)'(desired)? – Rhubarb

5

您必須分配它,像這樣: -

df['id']= df['id'].astype(str)