python - 使用 pandas 动态导入 EXCEL 工作表并将它们分配给 Python 中的 DataFrames

标签 python excel python-3.x pandas

我有一个包含多个工作表的 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/

相关文章:

C# Windows 窗体单元测试

c# - gridview中添加空行的问题

python - Tkinter:在框架类中创建多个框架

当进程是守护进程时,python 的多处理模块的 join()

python - 如何为 Django 模型中的用户名匹配数据库中的确切大小写?

Excel VBA 将值分配给用户定义函数的命名范围失败错误 1004

python - 在python类中动态添加对算术魔法函数的支持

python - 将框架中的所有条目小部件绑定(bind)到一个键

python - 如何使用文件和循环获取列表中的步骤?

python - 打印变量并在循环中附加文件中的一行