【问题标题】:What is the best way to integrate different Excel files with different sheets with different formats in Python?在 Python 中将不同 Excel 文件与不同格式的不同工作表集成的最佳方法是什么?
【发布时间】:2021-02-26 15:55:22
【问题描述】:

我有多个 Excel 文件,每个文件中都有不同的工作表,这些文件已经成为我的人,所以每个文件都有不同的格式、不同的列数和不同的结构来表示数据。 例如,在一张纸中,数据框/表格从第 8 行第 2 列开始。在其他情况下,它从 122 行开始,等等......

我想从这些 Excel 中检索一些共同点,即变量名和信息。

但是,我不知道如何在不需要解析每个单独文件的情况下检索所有这些信息。这不是一个选项,因为这些文件很多,每个文件中有很多工作表。

我一直在考虑使用正则表达式以及编辑单词之间的距离,但我不知道这是否是最佳选择。

感谢任何帮助。

【问题讨论】:

  • 不同格式之间是否有任何共同点来识别感兴趣的列? (我假设这些值都在列中,无论它们在工作表中的何处开始)。我认为您的问题太模糊,无法给出有意义的答案。数据是否以任何有意义的方式相似? (是数值列吗?有一定的范围吗?)
  • 是的,工作表的不同位置有表格,但是表格的每个标题使用不同但相似的名称。问题太模糊的原因是因为问题模糊,有很多不同格式的文件,不同的列名,不同的顺序。
  • 手动创建列标题同义词列表是否可行?然后遍历每个工作簿和工作表,寻找任何已知的标题,跳过空白行和列?
  • @GordonAitchJay 是的,有可能,但我认为这不是一个很好的方法,因为人们可以更改标题名称、标题顺序。还要解析所有的excel表格来搜索表格,这将花费大量时间。我认为解决这个问题的唯一方法是告诉人们为 Excel 制定标准格式。
  • 我同意,看起来最好的选择是分发具有标准名称的 excel 模板。您在问题中建议的想法可能是最好的,您可以定义更高级的相似性指标而不是正则表达式,但我不知道有任何技术可以解决潜在问题

标签: python excel parsing


【解决方案1】:

我会将我的答案分为我认为你现在可以做什么,以及对未来的建议(如果可行的话)。

尝试“解决”现有文件的问题。

如果您的输入文件没有规律性(例如至少列中的一个通用名称),我认为您所描述的是最好的解决方案之一。话虽如此,也许列名之间的“更高级”的相似性度量会比使用正则表达式更有用。

如果您认为列名中会有一些规律性,您可以查看字符串距离,例如 Hamming DistanceLevenshtein distance,以及使用适合您的距离阈值。例如,假设你有一个函数d(a:str, b:str) -> float 计算列名之间的距离,你可以这样做:


# this variable is a small sample of "expected" column names
plausible_columns = [
    'interesting column',
    'interesting',
    'interesting-column',
    'interesting_column',
]

for f in excel_files:
    # process the file until you find columns 
    # I'm assuming you can put the colum names into 
    # a variable `columns` here. 
    for c in columns:
        for p in plausible_columns:
            if d(c,p) < threshold:
                # do something to process the column, 
                # add to a pandas DataFrame, calculate the mean, 
                # etc.

如果数据本身可以告诉您是否应该处理它(例如具有特定分布或处于特定范围内),您可以使用这些功能来决定是否应该使用该列.更好的是,您可以使用许多这些特征来做出更好的决定。

话虽如此,如果不手动检查一些数据、研究数据的分布或列名称的可变性等,我认为不存在完全自动化的解决方案。

为了未来

即使使用奇特的方法来计算特征并对您现在拥有的数据进行一些数据分析,我认为也不可能确保您始终获得所需的数据(根据问题的本质)。在我看来,解决这个问题的一种合理方法(如果这在你工作的任何环境中都是可行的)是在数据生成端施加更严格的格式(我想这是人们输入数据的手动操作)直接excel)。我认为最好的解决方案是从根本上摆脱问题,并创建一个统一的表格,或excel表格格式,并将其分发给将用数据填充文件的人员,这样您就可以确保数据然后自动摄取,最大限度地降低错误风险。

【讨论】:

    猜你喜欢
    • 2021-08-03
    • 1970-01-01
    • 2016-04-05
    • 2021-10-19
    • 2016-03-28
    • 2022-01-26
    • 2022-09-27
    • 2017-01-09
    • 1970-01-01
    相关资源
    最近更新 更多