【发布时间】:2020-02-25 06:08:01
【问题描述】:
我有 20 个文件夹,每个文件夹中有不同数量的 excel(如 .xlsx)文件。每个 excel 文件都有不同数量的工作表,工作表在第一行有不同的列数和不同的列名。第二行有列名,其通用名称为“数字”(如下面的 excel 屏幕截图所示)。 我需要从每个工作表、每个 excel、每个文件夹中的名称为“数字”的特定列中提取唯一值,然后汇总到具有由此收集的唯一值的列。
因为我不是 excel 方面的专家,所以我只用下面的代码尝试了一个 excel。
import os
import pandas as pd
workbook = r'C:\Users\Material.xlsx'
df = pd.concat(pd.read_excel(workbook, sheet_name = None , usecols = ['Number'], header = 1))
df = df.Number.unique()
df
我在这里遇到过这个问题:
- 此脚本从 Excel 中读取所有工作表,但如果存在不同数量的同名列,则它仅读取第一列。这不应该是这样。 EX:我应该得到一个唯一列,其中包含“数字”列中的所有唯一值,如下面屏幕截图中的“Sheet1”所示。
- 它返回一个数组,我想要一个 df。
也试过这个代码:
import os
import pandas as pd
folder_path = os.chdir(r'C:\Users\Material.xlsx')
files = os.listdir(folder_path)
print(files)
df2 = pd.DataFrame()
for i in range (len(files)):
df = pd.read_excel(files[i], header=1)
df1 = df.filter(regex='Number')
df2 = pd.concat([df2, df1], axis=1, sort=False)
i = i+1
df2 = df2.filter(regex='Number')
df2
df2.to_excel(r"r'C:\Users\output.xlsx', index = False)
这里的问题是:
- 如果有许多同名的列,我只会得到第一列的值。
- 只取单个工作表,不考虑 Excel 中的其他工作表。
请帮忙
【问题讨论】:
-
为什么不将它们保留为有序的字典,由 read_excel() 返回?
-
有序字典很好(我在那里有我的数据),但我最终希望它在一个单独的 df 中,我不知道该怎么做/我没有那里的专业知识。跨度>
-
pd.concat([df1,df2,df3, ....], axis=0, ignore_index=True)将连接具有不同列数的数据帧,并在缺少特定列时添加 nan。
标签: python python-3.x pandas dataframe data-analysis