use*_*ser 3 python excel concatenation pandas dictionary-comprehension
我有很多选项卡的 excel 文件。我想连接所有这些,一次一个标签。
我在做:
mypath = "mypath"
files = os.listdir(mypath)
files = [os.path.join(mypath,f) for f in files if f[-4:]=='xlsx']
sheets = pandas.ExcelFile(files[0]).sheet_names
Run Code Online (Sandbox Code Playgroud)
现在,假设我的选项卡是 alpha、beta、gamma 等,我想创建一个数据框列表 df_alpha、df_beta 等,它们是我目录中文件的所有 alpha 选项卡的联合。
通过做:
for sheet in sheets:
df = pandas.DataFrame()
for f in files:
df = pandas.concat([df, pandas.read_excel(f, sheet_name=sheet)])
Run Code Online (Sandbox Code Playgroud)
我可以得到我想要的,但当然我只有一个数据框,它是每个文件中最后一个选项卡的联合。如何更改代码以便我有一个 dfs 列表,每个名称都命名为 df_alpha、df_beta 等?
如果您可以使用数据框字典,以下内容可能会有所帮助:
df_dict = {}
for sheet in sheets:
df = pandas.DataFrame()
for f in files:
df = pandas.concat([df, pandas.read_excel(f, sheet_name=sheet)])
df_dict[sheet] = df
Run Code Online (Sandbox Code Playgroud)
稍后您可以df
使用其键从字典中调用相关内容,例如df_dict['alpha']
.
更新:如@ALollz 的评论中所述,由于多个连接到同一数据帧,上述代码段效率低下。所以更有效的方法是:
df_dict = {}
for sheet in sheets:
df_dict[sheet] = pandas.concat(pandas.read_excel(f, sheet_name=sheet) for f in files)
Run Code Online (Sandbox Code Playgroud)
请注意,在这种情况下,可以不在内部定义显式列表推导式pandas.concat
(内部表达式成为生成器)。
更新 2:也许使用 dict 理解更“pythonic”(使用更常见的pd
而不是pandas
):
df_dict = {
sheet: pd.concat(pd.read_excel(f, sheet_name=sheet) for f in files)
for sheet in sheets
}
Run Code Online (Sandbox Code Playgroud)
这里的技巧是使用上面的片段来定义key: value
字典理解。
归档时间: |
|
查看次数: |
66 次 |
最近记录: |