python pandas如何查找不同excel表格的数据并对比大小?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python pandas如何查找不同excel表格的数据并对比大小?相关的知识,希望对你有一定的参考价值。

有两个表,分别是"本次成绩.xlsx"、"上次成绩.xlsx",希望实现的效果是:依次读取本次成绩.xlsx中的每一行数据在上次成绩.xlsx中查找到对应的名字(如果上次成绩中没有名字就返回对比结果"上次缺席")并对比两次的成绩最终在第三列 ["对比上次"] 中显示对比结果并导出到"本次成绩_对比.xlsx",大致逻辑可以看最后一个思维导图。

PS:如果能用EXCEL软件本身的函数达到相同目的也可以。最好是python。

import pandas as pd
# 读取两张表格
new_df = pd.read_excel("本次成绩.xlsx")
old_df = pd.read_excel("上次成绩.xlsx")
# 拷贝一份要修改的数据,以免破坏源数据
ndf = new_df.copy()
# 首先将不在'上次成绩.xlsx'中的人直接修改'对比上次'字段为'上次缺席'
ndf['对比上次'][~ndf['姓名'].isin(old_df['姓名'].values)] = '上次缺席'
# 循环遍历'上次成绩.xlsx'中的每一行
for i in old_df.itertuples():
old_name = getattr(i, '姓名')
old_score = getattr(i, '上次成绩')
'''
当'本次成绩.xlsx'中的名字与 old_name 相同时
对比'本次成绩'与 old_score 的大小并修改'对比上次'为对应值
'''
ndf.loc[(ndf['姓名'] == old_name) & (ndf['本次成绩'] > old_score), '对比上次'] = '好'
ndf.loc[(ndf['姓名'] == old_name) & (ndf['本次成绩'] == old_score), '对比上次'] = '持平'
ndf.loc[(ndf['姓名'] == old_name) & (ndf['本次成绩'] < old_score), '对比上次'] = '差'
# 导出到新表格并隐藏索引列
ndf.to_excel('对比.xlsx', index=False)

仅供参考,请根据实际情况自行修改优化代码。

参考技术A 好麻烦,用VB、VBA、VBS实现起来相当容易,而且不需要安装拍怂,直接运行即可。
楼主舍近求远学拍怂,被骗了。追问

您好,能说下vb怎么实现吗,10几年前学过一点vb应该还能看懂代码。

python pandas如何过滤剔除数据?

我有表1是所有客户的客户号,表2是黑名单客户,现在读取表1后如何剔除表二的102、106,最后导出优质客户到表3

参考技术A

import pandas as pd


khhlist = pd.read_excel('客户号.xlsx')
hmdlist = pd.read_excel('黑名单.xlsx')
khhlist = khhlist[~khhlist['客户号'].isin(hmdlist['黑名单客户'].values)]
renamelist = '客户号':'优质客户'
yzkhlist = khhlist.rename(columns=renamelist)
yzkhlist.to_excel('优质客户.xlsx', encoding='utf8')

这个简单,用isin函数,前面加上~取反即可

追问

谢谢 简洁明了 直接复制到py文件里实测可行

本回答被提问者采纳
参考技术B

用下面的差集运算就可以

>>> basket = 'apple', 'orange', 'apple', 'pear', 'orange', 'banana'
>>> print(basket)                      # 这里演示的是去重功能
'orange', 'banana', 'pear', 'apple'
>>> 'orange' in basket                 # 快速判断元素是否在集合内
True
>>> 'crabgrass' in basket
False

>>> # 下面展示两个集合间的运算.
...
>>> a = set('abracadabra')
>>> b = set('alacazam')
>>> a                                  
'a', 'r', 'b', 'c', 'd'
>>> a - b                              # 集合a中包含而集合b中不包含的元素
'r', 'd', 'b'
>>> a | b                              # 集合a或b中包含的所有元素
'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'
>>> a & b                              # 集合a和b中都包含了的元素
'a', 'c'
>>> a ^ b                              # 不同时包含于a和b的元素
'r', 'd', 'b', 'm', 'z', 'l'

追问

谢谢回答 另一位的答案更加简洁方便 而且手把手解决了我的实际情况 不好意思了

以上是关于python pandas如何查找不同excel表格的数据并对比大小?的主要内容,如果未能解决你的问题,请参考以下文章

Python Pandas 数据框在 Excel 工作表中读取精确的指定范围

Python Pandas根据日期从1个表创建5个excel文件

Python:在多张工作表上将 Pandas DataFrame 写入 Excel 的最快方法

Python:如何快速创建仅包含大型 Excel 工作表中特定列的 pandas 数据框?

Python Pandas - 如何在 Excel 工作表的特定列中写入

如何在python中使用pandas在现有的excel工作表中追加列