我有一个包含多个工作表的 EXCEL 文件(远远超过本例中使用的三个工作表中使用的三个工作表)。我想逐张动态导入它们并为它们分配后缀以区分它们,因为它们是在不同时间获取的相同变量。我可以使用以下代码来完成:
import pandas as pd
filename = 'test.xlsx'
xls = pd.ExcelFile(filename)
df_1 = pd.read_excel(xls, '#1')
df_1 = df_1.add_suffix('_1')
df_2 = pd.read_excel(xls, '#2')
df_2 = df_2.add_suffix('_2')
df_3 = pd.read_excel(xls, '#3')
df_3 = df_3.add_suffix('_3')
但是,当我将大量变量分配给不同的工作表时,这会变得有点乏味。因此,我想看看是否有一种方法可以使用 for 循环动态执行此操作,这样我还可以为每次迭代更新 DataFrame 名称。
- 有办法吗?
- 是否建议动态分配变量?
最佳答案
对于您使用 list comprehension 描述的这种情况,我尝试了一些更多的 pythonic 方法。和 dict comprehension (您可以选择使用哪一个)。
df_dict = { 'df_' + str(c) : pd.read_excel(xls, i) for c, i in enumerate(xls.sheet_names, 1)}
df_list = [pd.read_excel(xls, i) for i in xls.sheet_names]
print(df_dict['df_1'])
print(df_list[0])
正如您通过测试所见,两者将生成相同的 DataFrame。
首先,您将通过数字索引(df_list[0]
、df_list[1]
等)访问您的数据。
在第二个中,您将使用您建议的名称通过 key 进行访问,例如,第一个 key 是 df_dict['df_1']
。
另一种方法是动态创建变量,将它们分配给您的 global
字典。例如,下面的代码将产生与上面显示的相同的结果:
for c, i in enumerate(xls.sheet_names, 1):
globals()['df_' + str(c)] = pd.read_excel(xls, i)
print(df_1)
但是,我不建议使用它,除非它真的是强制性的,因为您很容易失去对程序中创建的变量的跟踪。
关于python - 使用 pandas 动态导入 EXCEL 工作表并将它们分配给 Python 中的 DataFrames,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54650258/