我想提取Sheet表中的N、O和R列,对R列中相同姓名的人对应的N、O列的值分别相加,形成图2这样
print('Opening workbook...')
wb = openpyxl.load_workbook('C:/Users/mawenxin/Desktop/dome1/asd.xlsx') #打开Excel表格
sheet = wb.get_sheet_by_name('Sheet1') #获取工作表
nameData = { } #创建字典
print('Reading rows...')
for row in range(2,sheet.max_row+1): #从第二行循环到最后一行
JE = sheet['N'+str(row)].value
name = sheet['E'+ str(row)].value
SY = sheet['O'+str(row)].value #存储每一列的数据
#字典结构nameData['姓名'][金额][使用金额]
nameData={name,(JE,SY)}
我按照网上以及书上的内容只能写这点,也不知道对不对
【问题】
字典内能不能一个键对应两个值,或者对应一个元组或列表?
用什么函数进行提取合并姓名?
如果自定义函数要怎么写?
能不能帮我写一下,琢磨很久了也不知道咋写
建议用pandas来处理
具体如下:
如果没有安装pandas要先安装pandas模块(pip install pandas)
import pandas as pd
data=pd.read_excel('C:/Users/mawenxin/Desktop/dome1/asd.xlsx')
data=data[['批示','金额','使用金额']]
data=data.groupby(by='批示',as_index=False).sum()
data.columns=['批示','求和项:金额','求和项:使用金额'] #data 就是你要的数据表
或者
import pandas as pd
data=pd.read_excel('C:/Users/mawenxin/Desktop/dome1/asd.xlsx')
data=data[['批示','金额','使用金额']]
data=data.groupby(by='批示').sum()
data.columns=['求和项:金额','求和项:使用金额'] #data 就是你要的数据表
这个使用pandas处理起来比较简单,这个是我根据excel简单些的一个代码,不知道怎么样,可以先试试
import pandas as pd
nameData = { } # {'批示人名':{"amount":[],'usageamount':[]}}
df = pd.read_excel('C:/Users/mawenxin/Desktop/dome1/asd.xlsx',sheet_name='Sheet1')
for name,amount,usageamount in zip(df['批示人'],df['金额'],df['使用金额']):
if name not in nameData.keys():
nameData[name] = {"amount":[float(amount)],"usageamount":[float(usageamount)]}
else:
nameData[name]["amount"].append(float(amount))
nameData[name]["usageamount"].append(float(usageamount))
print(nameData)
for k,v in nameData.items():
print("批示人:%s , 金额:%s,使用金额:%s" %(k,sum(v['amount']),sum(v['usageamount'])))
加载xlwings 用它操作excel很方便,没有就在线pip install xlwings安装,使用方法网上有很多,感觉目前它操作excel表是最方便的一种,可以读写块,自己试试
换个思路,使用VLOOKUP
找到对应的数值,相加