在Python中集成不同Excel文件和不同格式的不同工作表的最佳方法是什么?

在Python中集成不同Excel文件和不同格式的不同工作表的最佳方法是什么?,python,excel,parsing,Python,Excel,Parsing,我有多个Excel文件,每个文件中有不同的表格,这些文件都是我的人,因此每个文件都有不同的格式、不同的列数和不同的结构来表示数据。 例如,在一个工作表中,dataframe/表从第8行第二列开始。在另一种情况下,它从122行开始,以此类推 我想从这些EXCEL中检索一些共同点,即变量名和信息 然而,我不知道我怎么可能检索所有这些信息而不需要解析每个单独的文件。这不是一个选项,因为有很多这样的文件,每个文件中都有很多工作表 我一直在考虑使用正则表达式以及编辑单词之间的距离,但我不知道这是否是最好的

我有多个Excel文件,每个文件中有不同的表格,这些文件都是我的人,因此每个文件都有不同的格式、不同的列数和不同的结构来表示数据。 例如,在一个工作表中,dataframe/表从第8行第二列开始。在另一种情况下,它从122行开始,以此类推

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

然而,我不知道我怎么可能检索所有这些信息而不需要解析每个单独的文件。这不是一个选项,因为有很多这样的文件,每个文件中都有很多工作表

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


非常感谢您的帮助。

我将把我的回答分为我认为您现在可以做的事情和对未来的建议(如果可行的话)

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

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


#此变量是“预期”列名的小样本
似是而非的列=[
“有趣的专栏”,
“有趣”,
“有趣的专栏”,
“有趣的专栏”,
]
对于excel_文件中的f:
#处理文件直到找到列
#我想你可以把Column的名字写进
#这里有一个变量'columns'。
对于列中的c:
对于似是而非的列中的p:
如果d(c,p)<阈值:
#做点什么来处理这个列,
#添加到数据帧,计算平均值,
#等等。
如果数据本身可以告诉您是否应该处理它(例如具有特定的分布,或处于特定的范围内),那么您可以使用这些功能来决定是否应该使用该列。更好的是,您可以使用这些特性中的许多特性来做出更精细的决策

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

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

不同格式之间是否有共同之处来识别感兴趣的列?(我假设所有值都在列中,而不管它们在工作表中从何处开始)。我认为你的问题太模糊了,无法给出有意义的答案。数据是否有任何有意义的相似之处?(它是数字列吗?它有一定的范围吗?)是的,表格的不同位置有表格,但是表格的每个标题使用不同但相似的名称。这个问题太模糊的原因是因为问题很模糊,有很多不同格式的文件,列名称的顺序不同。手动创建列标题同义词列表是否可行?然后在每个工作簿和每张工作表上循环,查找任何已知的标题,跳过空白行和空白列?@GordonAitchJay是的,这是可能的,但我认为这不是一个很好的方法,因为人们可以更改标题名称和标题顺序。此外,解析excel的所有工作表并搜索表也将花费大量时间。我认为解决这个问题的唯一办法是告诉人们为excel制作一个标准格式。我同意,看起来最好的替代方法是分发一个带有标准名称的excel模板。您在问题中提出的想法可能是最好的,您可以定义更奇特的相似性度量,而不是正则表达式,但我不知道有任何技术可以解决根本问题