【问题标题】:Looking to merge two Excel files by ID into one Excel file using Python 2.7希望使用 Python 2.7 按 ID 将两个 Excel 文件合并为一个 Excel 文件
【发布时间】:2013-07-13 18:22:51
【问题描述】:

我是 Python 家族的新手,几天来一直在尝试解决合并两个 Excel 文件的问题。我无休止地研究了合并,并试图调整我的代码以满足我的需求,但它一直没有奏效。我想知道我是否可以就我的代码为什么不工作获得任何帮助。我觉得这可能是其他使用 Python 的人的常见问题,所以希望这也能帮助其他人。我感谢任何 cmets!

我有两个 Excel 文件,“Chinese Scores3.csv”和“Chinese Scores4.csv”,我试图通过每个公司独有的 ID 合并它们。除了公司 ID,每个 Excel 文件都没有匹配的列。此外,并非所有公司都列在这两个文件中。有些列出了两者,但其他列出了一个或另一个。我想将公司 ID 的所有信息一起附加到 Excel 表上的一行中。即第一个 excel 文件列是 ID、JanSales、FebSales 等,第二个 excel 文件列是 ID、CreditScore、EMMAScore 等。我要创建的 excel 文件有列:ID、JanSales、FebSales、CreditScore、EMMAScore 全部根据公司ID。

这有意义吗?这就像在 excel 中使用 VLOOKUP,但我想使用 Python 来做到这一点。无论如何,这是我的编码,它不起作用。我尝试操纵它,但它不起作用。希望得到反馈!

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:]) )

【问题讨论】:

    标签: excel python-2.7 spreadsheet merging-data


    【解决方案1】:

    虽然我们可以修复您的代码,但如果您要进行此类工作,我强烈建议您查看 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
    

    然后我们可以在 ID 列上合并它们:

    >>> 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")
    

    【讨论】:

    • DSM,推荐 pandas 是个好主意。它比我使用的方法更有意义。感谢您清理一切!
    猜你喜欢
    • 1970-01-01
    • 2020-06-12
    • 1970-01-01
    • 2020-12-16
    • 2015-01-12
    • 2020-08-05
    • 2022-11-09
    • 2014-07-22
    • 2022-12-15
    相关资源
    最近更新 更多