使用列表中的名称创建数据框
Create dataframes with names from a list
我有 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
现在,假设我的选项卡是 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)])
我可以得到我想要的,但当然我只有一个数据框,它是每个文件中最后一个选项卡的并集。我怎样才能更改代码,以便我有一个 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
稍后您可以使用它的键从字典中调用相关的 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)
请注意,在这种情况下,可以不在 pandas.concat
中定义显式列表理解(内部表达式成为生成器)。
更新 2:也许使用字典理解更多 'pythonic'(使用更常见的 pd
而不是 pandas
):
df_dict = {
sheet: pd.concat(pd.read_excel(f, sheet_name=sheet) for f in files)
for sheet in sheets
}
这里的诀窍是使用上面的代码片段来定义 key: value
和字典理解。
我有 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
现在,假设我的选项卡是 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)])
我可以得到我想要的,但当然我只有一个数据框,它是每个文件中最后一个选项卡的并集。我怎样才能更改代码,以便我有一个 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
稍后您可以使用它的键从字典中调用相关的 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)
请注意,在这种情况下,可以不在 pandas.concat
中定义显式列表理解(内部表达式成为生成器)。
更新 2:也许使用字典理解更多 'pythonic'(使用更常见的 pd
而不是 pandas
):
df_dict = {
sheet: pd.concat(pd.read_excel(f, sheet_name=sheet) for f in files)
for sheet in sheets
}
这里的诀窍是使用上面的代码片段来定义 key: value
和字典理解。