2016-09-16 76 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()仍然可以工作,是吗? –