合并多个 excel 个名称相似的文件

combine multiple excel files with similar names

我有一个关于将多个 excel 文件组合在一起的一般性问题。通常,我会使用 pd.read_excel 来读取文件然后 concat 加入。但是,我遇到了一些字段名称不完全相同但相似的情况。例如,

一个 sheet 将具有如下字段:Apple、Orange、Size、Id

另一个 sheet 将是:Apples, orange, Sizes, #

我使用了重命名列功能,但是我必须检查并比较每个文件中的每个名称。我想知道是否有任何方法可以在不遍历所有字段名称的情况下将它们组合起来。任何想法?谢谢!

定义两个字符串相同的含义,然后您可以自动重命名(您还需要确定字符串的 "canonical" 形式是什么 - 您的名称我会在最终的数据框中实际使用)。这个问题很普遍,所以你必须根据你愿意考虑的列名的种类来决定,但一件简单的事情可能是使用这样的函数:

def compare_columns(col1: str, col2: str) -> bool:
    return col1.lower() == col2.lower()

在这里你会说任何两个名称相同但大小写不同的列都被认为是相等的。您可能希望将列的规范形式定义为全部为小写字母。

实际上,现在我想起来了,因为无论如何你都需要一个规范形式的列名,最简单的方法可能是,而不是比较名称,只是将所有名称转换为规范形式,然后像往常一样合并。在此处的示例中,您将所有数据框的所有列重命名为小写版本,然后它们将正确合并。

困难的部分是决定对每个名称应用什么转换以使其成为规范形式。您所做的任何转换都存在组合非本意数据的风险(即使只是更改大小写),因此您需要根据您对列名的期望自行决定哪些更改是合理的。

正如@ako 所说,您也可以使用 Levenstein 距离之类的方法来执行此操作,但我认为这比仅确定一组要在每个列名称上使用的转换更棘手。使用 Levenstein 或类似工具,您需要决定重命名为哪个名称,但您还必须跟踪映射到该名称的所有名称,并在决定是否使用新名称时计算该组中最接近的成员之间的 Levenstein 距离映射到该规范名称(例如,假设您有 "Apple" 和 "Aple" 以及 "Ale" 并且正在合并编辑距离为 1 或更小的名称。"Apple" 和 "Aple" 应该合并,"Aple" 和 "Ale" 也应该合并。"Apple" 和 "Ale" 通常不应该合并(因为它们的距离是 2),但是因为它们都与 "Aple", 他们现在也互相融合了).

您还可以查看自动更正,尝试将 "Aple" 之类的内容转换为 "Apple" 而无需 "Ale" 也合并;我确定 Python 中有一些库可以进行自动更正。此外,如果您想进行词干提取以尝试合并诸如 "Apples" 和 "Apple".

之类的内容,则有一些 NLP 工具可以为您提供帮助

但这一切都会很棘手。小写的东西可能有用,虽然=)