2016-09-16 81 views
1

我有一個xlsx文件,其數據列數超過1000列。我想首先解析數據文件(可以包含數字和字母)的每一列,然後從解析的數據中創建一個唯一的列表。使用Pandas創建唯一列表

我是一個完整的noob &已經嘗試了「for」和「do while」循環,但都沒有爲我工作。

到目前爲止,我有:

import pandas as pd 
    workbook = pd.read_excel('C:\Python27\Scripts\Data.xlsx') 
    worksheet = workbook.sheetname='Data' 

    for col in range(worksheet[0], worksheet[1300]): 
     print(col) 

我想我需要追加的數據,也許寫入一個文本文件,然後創建一個從文本文件中的唯一列表 - 我可以做的第二部分,它只是讓它進入我遇到麻煩的文本文件。

感謝

+0

對不起,當你說每隔一列你是第二列還是每一列?你也想要一些全球列表或每列列表?你有沒有看過['unique'](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.unique.html#pandas.Series.unique)? – EdChum

+0

謝謝埃德,它是每個偶數列 - 0,2,4,6,8等,或者A,C,E,G,我一直到AWK。總共有1286列,所以我想列出643個列表,然後從列表中創建一個唯一列表。我一定會使用pandas.series.unique(),但我不確定如何將643列放入一個列表中。 –

回答

2

您可以通過切片和使用步驟在你列迭代ARG即df.ix[:, ::2]

In [35]: 
df = pd.DataFrame({'a':1, 'b':[1,2,3,4,5], 'c':[2,3,4,5,6], 'd':0,'e':np.random.randn(5)}) 
df 

Out[35]: 
    a b c d   e 
0 1 1 2 0 -0.352310 
1 1 2 3 0 1.189140 
2 1 3 4 0 -1.470507 
3 1 4 5 0 0.742709 
4 1 5 6 0 -2.798007 

這裏我們一步的每2列:

In [37]: 
df.ix[:,::2] 

Out[37]: 
    a c   e 
0 1 2 -0.352310 
1 1 3 1.189140 
2 1 4 -1.470507 
3 1 5 0.742709 
4 1 6 -2.798007 

那麼我們只需調用np.unique在整個df上得到所有唯一值的單個數組:

In [36]: 
np.unique(df.ix[:,::2]) 

Out[36]: 
array([-2.79800676, -1.47050675, -0.35231005, 0.74270934, 1.  , 
     1.18914011, 2.  , 3.  , 4.  , 5.  , 6.  ]) 
+0

非常好。一般來說,在調用'numpy'函數時,不需要調用'as_matrix'?我隱約記得,如果我不這樣做,sklearn會感到不適。 –

+0

@AmiTavory我認爲sklearn在處理dfs和系列作爲數據參數方面要好得多,但通常我只是通過了'df.values',我認爲'np'與數據框非常相稱,歷史上已經有一些'np'沒有正確調用'__array__'屬性,但最近沒有遇到它的情況往往 – EdChum

+0

謝謝你們,我快到了。我仍然在打印時收到所有的數據:df.ix [:, :: 2]。 np.unique()仍然可以工作,是嗎? –