Pandas操作两个Excel实现数据对应行的合并

 更新时间:2023年01月17日 10:04:05   作者:zorchp  
本文主要介绍了Pandas操作两个Excel实现数据对应行的合并,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

写在前面

最近有朋友问我怎么把一个Excel工作表中的数据按照对应的匹配规则放到另外一个表中, 要求是两个对应的列要相同, 具体来看就是sheet1中数据比较多, sheet2中只含有两列, 这两列包含了年份和行业信息, 这两个表的header(pandas中的术语, 表示表头或者列名)都是相同的, 所以关键点就是让表1中的数据与表2中的数据建立对应即可, 然后注意一下选取过的数据就不能选了这个条件.

当然可能会有直接使用Pandas内置高级函数的方法来做, 但是毕竟不是主要研究数据分析了, 能用就行…

为了数据安全, 这里就不放截图了.

主要思路

因为要填充表2, 那么当然要遍历表二的每一行, 针对这每一行给出的列标信息, 然后遍历表1中满足条件的行, 填入表二之后break即可, 因为可能会出现重复遍历, 这里用到了哈希表的方法, 并且哈希表也有两种实现,

一种是给表1新添加一个列, 这个列可以是布尔值或者全0列, 表示没有遍历过(unused), 然后在满足条件的行添加到表二之后, 将对应值设置为1即可, 这样可以在之后的遍历过程中忽略掉已添加的数据.
另一种方法就是使用哈希表存储表一中遍历过的行的索引, 思路跟上面是一样的, 但是不会对原始数据进行增删.

代码

代码部分我给出了两个版本, 一种是我首先想到的, 不借助pandas内置函数, 将数据转换为列表来完成, 这样虽然好想当然之后还要手动处理表头, 比较麻烦, 代码如下:

import pandas as pd

df1 = pd.read_excel('data.xlsx', sheet_name='Sheet1', header=0).values.tolist()
df2 = pd.read_excel('data.xlsx', sheet_name='Sheet2', header=0).values.tolist()
for i in range(len(df1)):
    df1[i].append(0)

for i, item in enumerate(df2):
    for j in range(len(df1)):
        if df1[j][-1] == 0 and df1[j][0] == item[0] and df1[j][2] == item[2]:
            df2[i] = df1[j]
            df1[j][-1] = 1
            break
df2 = pd.DataFrame(df2)
print(df2)

with pd.ExcelWriter("data.xlsx", mode='a', engine='openpyxl') as writer:
    df2.to_excel(writer, sheet_name="Sheet3")

另一种用到了pandas内置的行遍历方法和索引等方法, 对Dataframe这种pandas内置的原生数据结构支持比较好, 但是不用的话就总忘…

import pandas as pd
# pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None)

df1 = pd.read_excel('data.xlsx', sheet_name='Sheet1', header=0)
df2 = pd.read_excel('data.xlsx', sheet_name='Sheet2', header=0)
# 标记是否匹配过
used = set()

for idx2, row2 in df2.iterrows():
    tmp = df1[(df1['所属行业'] == row2['所属行业']) & (df1['新年份'] == row2['新年份'])]
    for idx1, row1 in tmp.iterrows():
        if idx1 not in used:
            df2.iloc[idx2, :] = row1
            used.add(idx1)
            break

df2.set_index('所属行业', inplace=True)
print(df2)

with pd.ExcelWriter("data.xlsx", mode='a', engine='openpyxl') as writer:
    df2.to_excel(writer, sheet_name="Sheet4")

到此这篇关于Pandas操作两个Excel实现数据对应行的合并的文章就介绍到这了,更多相关Pandas Excel行合并内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python中实现精确的浮点数运算详解

    python中实现精确的浮点数运算详解

    计算机智能处理可数集合的运算,但是全体实数是不可数的,所以计算机只能用一些奇怪的方法来拟合他,于是就产生了浮点数。下面这篇文章主要给大家介绍了关于python中实现精确浮点数运算的相关资料,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。
    2017-11-11
  • 对Python中list的倒序索引和切片实例讲解

    对Python中list的倒序索引和切片实例讲解

    今天小编就为大家分享一篇对Python中list的倒序索引和切片实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-11-11
  • python中视频音频的剪辑与处理实现

    python中视频音频的剪辑与处理实现

    Python中轻松实现各种视频处理操作,包括剪辑、合并、添加音频、文本、特效等多种功能,主要介绍了python中视频音频的剪辑与处理实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-06-06
  • Python计算指定日期是今年的第几天(三种方法)

    Python计算指定日期是今年的第几天(三种方法)

    这篇文章主要介绍了Python三种方法计算指定日期是今年的第几天,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • Python使用JDAudioCrawler将下载的音频存储到本地

    Python使用JDAudioCrawler将下载的音频存储到本地

    在当今数字化时代,音频数据的获取和处理变得越来越重要,本文将访问网易云音乐为案例,介绍如何使用JDAudioCrawler这个强大的工具,将音频数据存储下载到本地存储中,需要的可以了解下
    2023-10-10
  • python实现BackPropagation算法

    python实现BackPropagation算法

    这篇文章主要为大家详细介绍了python实现BackPropagation算法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • windows下安装Python虚拟环境virtualenvwrapper-win

    windows下安装Python虚拟环境virtualenvwrapper-win

    这篇文章主要介绍了windows下安装Python虚拟环境virtualenvwrapper-win,内容超简单,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-06-06
  • scrapy爬虫遇到js动态渲染问题

    scrapy爬虫遇到js动态渲染问题

    本文主要介绍了scrapy爬虫遇到js动态渲染问题,通过js渲染出来的动态网页的内容与网页文件内容是不一样的,本文就来解决一下这些问题,感兴趣的可以了解一下
    2022-05-05
  • Python random模块使用详解

    Python random模块使用详解

    random模块是Python标准库的一部分,主要用于生成伪随机数,它提供了众多函数,如random.randint、random.choice等,用于生成不同类型的随机数据,适用于各种需要随机性的场景,此模块生成的虽是伪随机数,但对大多数应用已足够,此外,还介绍了secrets模块,适合处理敏感信息
    2024-10-10
  • Python实现九宫格式的朋友圈功能内附“马云”朋友圈

    Python实现九宫格式的朋友圈功能内附“马云”朋友圈

    PIL(Python Imaging Library)是一个非常强大的Python库,但是它支持Python2.X, 在Python3中则使用的是Pillow库,它是从PIL中fork出来的一个分支。这篇文章主要介绍了用Python搞定九宫格式的朋友圈功能内附“马云”朋友圈 ,需要的朋友可以参考下
    2019-05-05

最新评论