【问题标题】:Creating a unique list using Pandas使用 Pandas 创建唯一列表
【发布时间】:2016-09-16 14:22:16
【问题描述】:

我有一个包含 1000 多列数据的 xlsx 文件。我想首先解析数据文件中的每一列(可以包含数字和字母),然后从解析的数据中创建一个唯一列表。

我完全是个菜鸟,我尝试过“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)

我想我需要附加数据并可能写入文本文件,然后从文本文件创建一个唯一列表 - 我可以做第二部分,它只是将它放入我遇到问题的文本文件中。

谢谢

【问题讨论】:

  • 对不起,当您说每隔一列时,您是指第二列还是每个偶数列?你还想要一些全局列表还是每列一个列表?你也看过unique吗?
  • 感谢 Ed,它是每个偶数列 - 0、2、4、6、8 等,或者 A、C、E、G、I 一直到 AWK。总共有 1286 列,所以我想从其中的 643 列中列出一个列表,然后从该列表中创建一个唯一列表。我肯定会使用 pandas.series.unique() 但我不确定如何将 643 列放入一个列表中。

标签: python-2.7 parsing pandas unique xlrd


【解决方案1】:

您可以通过切片和使用步骤 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

然后我们可以在整个 df 上调用 np.unique 来获取所有唯一值的单个数组:

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.        ])

【讨论】:

  • 非常好。一般情况下,调用numpy函数的时候,不需要调用as_matrix吗?我隐约记得如果我不这样做,sklearn 会不高兴。
  • @AmiTavory 我认为这些天 sklearn 在处理 dfs 和系列作为数据参数方面要好得多,但我经常只是通过 df.values,我认为 np 与数据帧配合得很好,从历史上看,np 没有正确调用 __array__ 属性但最近没有经常遇到的情况
  • 谢谢大家,我快到了。当我打印时,我似乎仍然在取回所有数据:df.ix[:, ::2]。但是 np.unique() 应该仍然可以工作,对吗?
猜你喜欢
  • 2021-11-27
  • 1970-01-01
  • 1970-01-01
  • 2021-10-20
  • 2019-01-10
  • 1970-01-01
  • 2018-07-30
  • 2019-12-26
  • 2020-10-16
相关资源
最近更新 更多