XLRD - 将两列中的数据提取到具有多个值的dict中

时间:2015-04-24 06:42:55

标签: python excel xlrd

我有一张excel表,其数据看起来像这样。

Column1 Column2 Column3
1       23      1
1       5       2
1       2       3
1       19      5
2       56      1
2       22      2
3       2       4
3       14      5
4       59      1
5       44      1
5       1       2
5       87      3

我想要做的是将Column1和Column3提取到具有多个值的字典中。像这样:

1: 1,2,3,5
2: 1,2
3: 4,5
4: 1
5: 1,2,3

我是Python的新手,所以我们非常感谢您提供的任何帮助!

我可以从两列中提取数据并将其放入dict中。但是每个键的多个值我不确定。并且还不确定如何将第1列中的所有1,2,3分组到单个条目中。

for rownum in range(sheet.nrows):
    results = dict((sheet.cell_value(rownum, 0), sheet.cell_value(rownum, 2)) for rownum in range(sheet.nrows))
return results
编辑:感谢本网站的帮助,这就是我目前所处的位置。

xl = pandas.read_excel(r"e:\py_projects\py_test\test_data.xlsx", sheetname='stockTestColumn1')
grouped = xl.groupby("columnid")
myData = grouped["volumeid"].apply(lambda x: [e for e in x]) 

我现在希望做的是检查任何给定密钥是否存在x。

所以,如果这是输出:

1: 1,2,3,4,5
2: 1,2
3: 4,5
4: 1
5: 1,2,3

我希望做类似的事情:

check = myData.get('1')
if '4' in check:
    print "do something"

1 个答案:

答案 0 :(得分:0)

这是pandas groupby的典型用例,

#!/usr/bin/python
import pandas as pd
from StringIO import StringIO

s = """Column1 Column2 Column3
1       23      1
1       5       2
1       2       3
1       19      5
2       56      1
2       22      2
3       2       4
3       14      5
4       59      1
5       44      1
5       1       2
5       87      3
"""

sio = StringIO(s)
df = pd.read_table(sio, sep=r"\s+")

grouped = df.groupby("Column1")
print grouped["Column3"].apply(lambda x: [e for e in x])

输出:

1    [1, 2, 3, 5]
2          [1, 2]
3          [4, 5]
4             [1]
5       [1, 2, 3]

检查迭代器中实际传递的sum签名apply。 基本上,pandas是进行这种表格数据处理的正确工具。