当前位置: 首页 > 知识库问答 >
问题:

希望使用Python 2.7按ID将两个Excel文件合并为一个Excel文件

宋明亮
2023-03-14

我是Python家族的新手,几天来一直试图解决合并两个Excel文件的问题。我对合并进行了无休止的研究,并试图调整我的代码以满足我的需求,但它一直不起作用。我想知道我是否能得到任何帮助,为什么我的代码不能工作。我觉得这可能是使用Python的其他人的一个常见问题,所以希望这也能帮助其他人。我很感激任何评论!

我有两个excel文件,“中文scores3.csv”和“中文scores4.csv”,我试图通过一个ID合并,这是每个公司唯一的。除了公司ID之外,每个excel文件都没有匹配的列。此外,并不是所有的公司都在这两个文件中上市。有些同时列出两者,但另一些则在其中之一或另一个上列出。我想把公司ID的所有信息一起附在excel表的一行中。即第一个excel文件列是ID、JanSales、FebSales等,第二个excel文件列是ID、CreditScore、EMMAScore等。我想创建的excel文件有列:ID、JanSales、FebSales、CreditScore、EMMAScore都根据公司ID。

import sys
import csv

def main(arg):
    headers= []

    for arg in 'Chinese Scores3.csv':
        with open(arg) as f:
            curr = 'Chinese Scores3.csv'.reader(f).next()
            headers.append(curr)
            try:
                keys=list( set(keys) & set (curr))
            except NameError:
                keys = curr


    header = list(keys)
    for h in headers:
        header += [ k for k in h if k not in keys ]

    data = {}
    for arg in 'Chinese Scores4.csv':
        with open(arg) as f:
            reader = 'Chinese Scores4.csv'.DictReader(f)
            for line in reader:
                data_key = tuple([ line[k] for k in keys ])
                if not data_key in data: data[data_key] = {}
                for k in header:
                    try:
                        data[data_key][k] = line[k]
                    except KeyError:
                        pass

    for key in data.keys():
        for col in header:
            if key in data and not col in data[key]:
                del( data[key] )

    print ','.join(header)
    for key in sorted(data):
        row = [ data[key][col] for col in header ]
        print ','.join(row)

if __name__ == '__main__':
    sys.exit( main( sys.argv[1:]) )

共有1个答案

卢阳泽
2023-03-14

虽然我们可以修复您的代码,但如果您要做这种工作,我强烈建议您查看pandas库。它使生活变得容易得多,但往往近乎琐碎。

例如,如果我们有两个csv文件(尽管如果我们愿意,我们可以直接从Excel文件开始):

>>> !cat scores3.csv
ID,JanSales,FebSales
1,100,200
2,200,500
3,300,400
>>> !cat scores4.csv
ID,CreditScore,EMMAScore
2,good,Watson
3,okay,Thompson
4,not-so-good,NA

我们可以将这些内容读入称为DataFrames的对象(把它们想象成类似于Excel表):

>>> import pandas as pd
>>> s3 = pd.read_csv("scores3.csv")
>>> s4 = pd.read_csv("scores4.csv")
>>> s3
   ID  JanSales  FebSales
0   1       100       200
1   2       200       500
2   3       300       400
>>> s4
   ID  CreditScore EMMAScore
0   2         good    Watson
1   3         okay  Thompson
2   4  not-so-good       NaN
>>> merged = s3.merge(s4, on="ID", how="outer")
>>> merged
   ID  JanSales  FebSales  CreditScore EMMAScore
0   1       100       200          NaN       NaN
1   2       200       500         good    Watson
2   3       300       400         okay  Thompson
3   4       NaN       NaN  not-so-good       NaN

之后,我们可以将其保存到csv文件或Excel文件中:

>>> merged.to_csv("merged.csv")
>>> merged.to_excel("merged.xlsx")
 类似资料:
  • 本文向大家介绍Python将多个excel文件合并为一个文件,包括了Python将多个excel文件合并为一个文件的使用技巧和注意事项,需要的朋友参考一下 利用Python,将多个excel文件合并为一个文件 思路 利用python xlrd包读取excle文件,然后将文件内容存入一个列表中,再利用xlsxwriter将内容写入到一个新的excel文件中。 完整代码 源文件excel1: 源文件e

  • 我在同一个excel表中有3000个类似于这些表的表: PS:我只需要csv表中指定的信息

  • 问题内容: 如何使用Java合并两个WAV文件? 我试过了,但是没有正常工作,他们还有其他方法吗? 问题答案: 如果直接使用wav文件的字节,则可以在任何编程语言中使用相同的策略。对于此示例,我将假设两个源文件具有相同的比特率/数字通道,并且具有相同的长度/大小。(否则,您可能可以在开始合并之前对其进行编辑)。 首先看一下WAV规范,我在斯坦福课程网站上找到了一个很好的人: 常见的标头长度为44或

  • 本文向大家介绍如何用python合并多个excel文件,包括了如何用python合并多个excel文件的使用技巧和注意事项,需要的朋友参考一下 安装模块 1、找到对应的模块  http://www.python-excel.org/ 2、用 pip install 安装 因为使用的是 python3,所以安装的时候采用 pip3。 XlsxWriter 示例 先看看简单的演示: 运行结果如下: 合

  • 问题内容: 我正在尝试合并以下两个文件(交集) 第二个文件Test2.txt 然后最终结果 我确实如下所示 我只是注意到这是联盟设置的。包括所有数据Test1和Test2。 我只希望对Intersection案例显示我期望的结果。仅(1,2,3,4) 你们有什么主意吗?谢谢! 问题答案:

  • 我有一个for循环,它导入目录中的所有Excel文件,并将它们合并到一个数据框中。但是,我想创建一个新列,其中每一行都采用Excel文件名的字符串。 这是我的导入和合并代码: 例如,如果第一个Excel文件名为file1.xlsx,我希望该文件中的所有行在(一个新列)中有值。如果第二个Excel文件名为file2.xlsx,我希望该文件中的所有行都具有值。请注意,Excel文件没有真正的模式,我只