2016-02-11 102 views
2

我以熊貓文檔爲例。讓我們說我有一系列的閱讀Excel文件打印列表列作爲列

import pandas as pd 
s = pd.Series(["a","b","c","a"], dtype="category") 

後,我知道我可以通過

scat=s.cat.categories 
print scat 

因我所得到

Index([u'a', u'b', u'c'], dtype='object') 

我想知道什麼是讓不同類別使列表顯示爲列的好方法。喜歡的東西

a 
b 
c 

我可以做np.asarray擺脫u'但還是沒有得到我需要的格式。

+0

您是否使用python 2.x?對於Python 3.4.3,我得到了沒有'u'的結果。 –

+0

是的,我正在使用python 2.有趣的是,你'不來python 3x。 – PagMax

+0

你可以檢查'字符串'的類型嗎?像'type(scat [0]) –

回答

4

我不知道用你的意思時,你說'出現'爲一列。

您可以通過創建一個列表,而不是索引:

>>> s.cat.categories.tolist() 
['a', 'b', 'c'] 

或者你也可以使用一個for循環簡單地打印出來一列結構:

for c in s.cat.categories: 
    print c 

a 
b 
c 

或者你可以創建一個系列(或數據幀):

>>> pd.Series(s.cat.categories) 
0 a 
1 b 
2 c 
dtype: object 

>>> pd.DataFrame(s.cat.categories) 
    0 
0 a 
1 b 
2 c 
+0

感謝這正是我正在尋找,這就是我的意思是'出現'列。這並不是說我想要使用一個循環,但我想可能有一個更簡單的方法來實現它,而無需使用循環 – PagMax

+0

完美。 Series和DataFrames解決方案非常棒!很高興學習。 – PagMax

+0

當我使用pd.DataFrame(scat)vs print pd.DataFrame(scat)時,輸出格式發生變化。基本上,打印命令將刪除輸出包裝好的表格。任何想法爲什麼? – PagMax

3

我認爲這是沒有問題的 - 'u'意味着unicode字符串:

s = pd.Series(["a","b","c","a"], dtype="category") 
print s 
0 a 
1 b 
2 c 
3 a 
dtype: category 
Categories (3, object): [a, b, c] 

scat=s.cat.categories 
print scat 
Index([u'a', u'b', u'c'], dtype='object') 

print scat[0] 
a 

print type(scat[0]) 
<type 'str'> 

如果你想在不使用循環打印numpy reshape柱:

print len(scat) 
3 
print scat.values.reshape(len(scat),1) 
[['a'] 
['b'] 
['c']] 
+0

這給了我整個數據框。我需要的只是印製的獨特類別。所以a應該只出現一次。 – PagMax

+0

謝謝。這也適用。很好學習重塑包裝。 – PagMax