繁体   English   中英

使用熊猫动态导入EXCEL工作表并将其分配给Python中的DataFrames

[英]Dynamically import EXCEL sheets and assign them to DataFrames in Python using 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名称。

  • 有没有办法做到这一点?
  • 是否建议动态分配变量?
import pandas as pd   

filename = 'test.xlsx'
xls   = pd.ExcelFile(filename)
c = 0
dfs = []
for i in xls.sheet_names: #xls.sheet_names contains list of all sheet names in excel.
    df = pd.read_excel(xls, i)
    df = df.add_suffix('_' + str(c))
    dfs.append(df) 
    c += 1

#dfs[0], dfs[1], ... contains all the dataframes of respective sheets 

对于列表描述和字典理解 (您可以选择要使用的一种)描述的场景,我尝试了更多的Python方法。

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]等)访问数据。

在第二个中,您将使用建议的名称通过键进行访问,例如,第一个键是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)

但是,除非真正必要,否则我不建议您使用它,因为您可以轻松地跟踪程序中创建的变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM