【问题标题】:Pandas: Save multiple sheets into separate dataframes熊猫:将多张工作表保存到单独的数据框中
【发布时间】:2019-10-26 03:57:27
【问题描述】:

我有一个包含多个工作表的 Excel 文件,我想使用循环将每个工作表保存到一个单独的数据框中。

countries = ['Thailand', 'China']
for country in countries:
    (country + '_data') = pd.read_excel(path, sheet_name = country)

但是我收到一条错误消息: SyntaxError: 无法分配给操作员

我知道分配不正确,但是如何构建一个正确的循环来为每个工作表生成单独的数据框?

【问题讨论】:

  • 这不是在 Python 中声明变量的方式。而that,我的意思是:(country + '_data')
  • 您正在尝试将数据框分配给元组,例如('a' + 'b') = pd.DataFrame()。因此错误。尝试使用字典理解:d = {country: pd.read_excel(path, sheet_name=country) for country in countries}

标签: python pandas


【解决方案1】:

更好的方法是

  1. 使用内置的pd.ExcelFile方法
  2. 使用字典将工作表保存在单独的数据框中。

例如:

xl = pd.ExcelFile(file)
print(xl.sheet_names)
['China','Japan','Pakistan'...] 

然后你可以将它们分配给一个 dict

d = {} # your dict.
for sheet in xl.sheet_names:
    d[f'{sheet}']= pd.read_excel(xl,sheet_name=sheet)

然后您可以调用您的个人 dfs

d['China'] 

【讨论】:

  • 类似,但pd.read_excel('pathtofile.xlsx',sheet_name = None) 将在每张工作表中读取到在{'sheet_name': dataframe} 字典中组织的不同数据框
  • @jtweeder 您应该将其添加为答案,代码较少,但预先设置工作表名称的灵活性较低。可能内存效率也更高。
  • 我愿意,但这个问题与已经有非常可靠答案的问题重复,我不想为了娱乐而重新创建它。
【解决方案2】:

我猜这是你正在寻找的东西,因为你要求一个循环。请记住,使用循环会使将 df 分配给变量变得更加困难。

另请注意,read_excel 将第一张表读取为 0

import pandas as pd

num_sheets = 3
sheets = dict()

for i in range(num_sheets):
    sheets[i] = pd.read_excel('./test.xlsx', sheet_name = i)

使用字典是在标题中包含循环的唯一简单方法。

如果您不需要循环,您可以简单地使用 read_excel 部分指定工作表名称或编号。

import pandas as pd

thailand_data = pd.read_excel('./test.xlsx', sheet_name = 'Thailand')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-21
    • 1970-01-01
    • 2021-09-20
    • 2019-01-25
    相关资源
    最近更新 更多