在Openpyxl中使用DefaultDict(List)

时间:2017-10-23 13:10:40

标签: python excel python-3.x openpyxl defaultdict

我正在尝试使用Python 3.6.1,Pycharm 2017.1.3。,Openpyxl 2.4.7和Excel 2016来实现这一目标。

这是我的数据集:

Sheet1:

productnum|keyword1|keyword2
0001      |red     |big     
0001      |blue    |red
0001      |large   |blue
0002      |green   |
0002      |small   |blue

我想最终得到这个:

productnum|keyword1      |keyword2    |combinedkeywords
0001      |red;blue;large|big;red;blue|red;blue;large;big
0002      |green;small   |blue        |green;small;blue

我被告知DefaultDict(List)是完成此任务的好方法。这是我到目前为止所做的尝试:

for rownum in range(1,maxRow):
     partnum = str(sheet1.cell(row=rownum, column=1).value)
     keyword1 = str(sheet1.cell(row=rownum, column=3).value)


    s = [(partnum,keyword1)]
          print(s)
          d = defaultdict(list)
          for k, v in s:
          d[k].append(v)

但我最终得到的并不完全是我需要的东西,如:

[('0001', 'red']
[('0001', 'blue']

等等。

有没有人对如何使用defaultdict(list)完成此操作有任何建议?提前致谢!

1 个答案:

答案 0 :(得分:0)

这不是您对defaultdict的问题的直接回答,而是另一种解决方法。您可以使用pandas来处理数据。以下代码:

import pandas as pd

# Read excel table into pandas dataframe
df = pd.read_excel('workbook.xlsx')

# Aggregate unique keywords for each product number
func = lambda x: tuple(x.unique())
df2 = df.groupby('productnum').agg(func)

# Create column for all keyword combinations
func = lambda x: tuple(set(x.keyword1) | set(x.keyword2))
df2['combinedkeywords'] = df2.apply(func, axis=1)

# Print result dataframe to screen and also to excel file
print(df2)
df2.to_excel('workbook2.xlsx')

将此产生为输出:

                      keyword1          keyword2           combinedkeywords
productnum
1           (red, blue, large)  (big, red, blue)    (red, large, blue, big)
2               (green, small)       (nan, blue)  (nan, green, blue, small)