[英]Python/Pandas: writing multiple Dataframes to Excel sheets using a “for-loop”
[英]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.