【Pandas】解决循环输出为多个sheet时,数据覆盖的问题

pandas入门萌新,多多关注哈,
博主目前就是帮老师打打工,处理一些大批量的excel,csv数据。
只需要看代码的直接看解决方案。

1 我的任务

博主的任务是需要处理一个excel中的多个sheet,每个sheet中的操作相同,处理完成后再导出为一个excel中的多个sheet的状态。
sheet名称

2 网上相关代码整理,需要拿

csdn上已经有很多关于这类的代码,但是都没有解决我的情况。

2.1 每个sheet保存为一个pandas,然后逐个输出。

import pandas as pd
writer = pd.ExcelWriter('test.xlsx')
data1.to_excel(writer,sheet_name='sheet1')
data2.to_excel(writer,sheet_name='sheet2')
writer.save()

这个方法可行,但是放进循环的话会覆盖。。。有的时候,我们对于每个sheet采用的是相同的处理程序,所以会用到循环。所以这个defeat。

2.2 引入openpyxl,理论上不覆盖

import pandas as pd
from openpyxl import load_workbook
 
writer = pd.ExcelWriter('path_to_out).xlsx',engin='openpyxl')
book = load_workbook(writer.path)
writer.book = book
dataframe.to_excel(excel_writer=writer,sheet_name="sheet_name")
writer.save()
writer.close()

说是理论上是因为我没跑成功😥)我还是把这段代码放进了循环,但是这段代码我一直显示不成功,报错的那种。很气但还是defeat。

3 解决方案

我的问题大概就在于上述代码放在循环里就不好使了,但是如果不用循环。。不够专业😎(说peach)所以俺动了动小脑筋,想了个方法。

3.1 基本假设(符合的场景)

如果大家跟我一样,任务要求满足以下几点:
1、需要处理一个文件中的多个sheet,每个sheet的处理方式几乎相同,可以放进循环里
2、输出为一个文件的多个sheet

3.2 预处理

那么可以这样做
①把sheet命名为有规律的名字,1期,2期,3期。或者自己定义一个字符串储存所有的sheet名。
②记得在文件夹下新建导出文件,path_to_out.xlsx。不然会显示查无此表。

3.3 代码

博主的想法是建立一个索引列表,然后每个列表元素对应一个pandas,这样的话,后续导出文件的代码就不用放在循环里了。处理数据时,可以用下标进行循环,所有sheet的数据都处理完后,再统一导出,就不存在覆盖的问题了。

大家根据情况自己修改哈。

#1.导入包
import pandas as pd

#2.设置变量
n = 5 #有几个sheet填几
#l是一个索引列表,每个列表元素对应一个pandas,这样储存的话,导出文件的代码就不用放在循环里了。
l = [pd.read_excel("path_to_in.xlsx",sheet_name=str(i)+"期")for i in range(1,n+1)]#sheet_name根据情况修改

#3.处理代码(循环)
for i in range(0,n): #开始进入每一个pandas
  #填入自己的处理代码
  '''
  #这里博主的任务是每个sheet的第二列及后面每一列数据的归一化(标准化),大家可以纠正一下
  for c in l[i].columns.values.tolist()[1:]:
        l[i][[c]] = l[i][[c]].astype(float)#原数据都是int,归一化后都是小数,需要更改类型。
        sum_c = sum(l[i][c])
        max_c = max(l[i][c])
        min_c = min(l[i][c])
    
        for t in l[i].index:
            l[i][c][t] = (l[i][c][t]-min_c)/(max_c-min_c)#标准化公式
    l[i] = l[i].set_index("编号")
  '''
#4.导出文件
with pd.ExcelWriter(r'path_to_out.xlsx') as writer:
    for m in range(0,n):
        l[m].to_excel(writer, sheet_name=str(m+1)+"期")

writer.save()
writer.close()

最后结果hin理想!🥰

上述代码有任何问题,欢迎大家一起交流哦,mark~

  • 10
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 在Python中,可以使用pandas库来读取Excel文件中的多个sheet数据。首先,需要安装pandas库,可以使用`pip install pandas`命令进行安装。 接下来,需要使用`pandas`的`read_excel()`函数来读取Excel文件。这个函数可以接受一个参数`sheet_name`,用于指定要读取的sheet名称或索引。 例如,如果Excel文件中有两个sheet分别为"Sheet1"和"Sheet2",可以通过以下代码读取它们的数据: ```python import pandas as pd # 读取Excel文件 data = pd.read_excel('filename.xlsx', sheet_name=['Sheet1', 'Sheet2']) # 获取第一个sheet数据 sheet1_data = data['Sheet1'] # 获取第二个sheet数据 sheet2_data = data['Sheet2'] ``` 在以上代码中,`filename.xlsx`是要读取的Excel文件的路径。通过`sheet_name`参数指定了要读取的sheet名称,使用了一个字典的方式将sheet名称和对应的数据存储在`data`变量中。 通过`data`变量,可以通过索引的方式获取到每个sheet数据,存储在不同的变量中,如`sheet1_data`和`sheet2_data`。 除了使用字典的方式读取多个sheet外,还可以使用其他的方式,如读取所有的sheet数据或者读取指定索引的sheet数据。详细的用法可以参考`pandas`官方文档。 这样就可以通过pandas库实现在Python中读取Excel文件中的多个sheet数据了。 ### 回答2: 在Python中,如果想要使用pandas库读取Excel文件中的多个sheet数据,可以按照以下步骤进行操作。 首先,需要安装pandas库。可以使用pip命令进行安装:pip install pandas 接下来,导入pandas库和openpyxl库(用于支持Excel文件的读写操作): import pandas as pd import openpyxl 然后,利用pandas的read_excel函数读取整个Excel文件: excel_file = pd.ExcelFile('文件路径/文件名.xlsx') 读取整个Excel文件的所有sheet名称: sheet_names = excel_file.sheet_names 遍历所有的sheet名称,读取每个sheet数据并存储到字典中: data_dict = {} for sheet_name in sheet_names: data_dict[sheet_name] = excel_file.parse(sheet_name) 最后,可以通过data_dict字典访问到每个sheet数据: for sheet_name, data in data_dict.items(): print("Sheet名称:", sheet_name) print("Sheet数据:", data) 注意事项: 1. 需要确定Excel文件的路径和文件名,并将其替换到代码中的'文件路径/文件名.xlsx'部分。 2. 需要确保Excel文件支持.xlsx格式,否则可能需要使用不同的库或方法进行读取。 3. 如果Excel文件中的数据包含特殊格式或公式,需要进行额外的处理或转换。 ### 回答3: Python中的pandas库提供了一种方便的方法来读取Excel文件中的多个sheet数据。要读取多个sheet数据,我们需要使用pandasExcelFile函数来打开Excel文件,然后使用parse方法来读取每个sheet数据。 首先,我们需要安装pandas库。在命令行中运行以下命令进行安装: pip install pandas 接下来,我们可以使用以下代码来读取多个sheet数据: import pandas as pd # 使用ExcelFile函数打开Excel文件 excel_file = pd.ExcelFile('filename.xlsx') # 获取所有sheet的名称 sheet_names = excel_file.sheet_names # 创建一个空的字典来存储每个sheet数据 data = {} # 遍历每个sheet的名称 for sheet_name in sheet_names: # 使用parse方法读取每个sheet数据 data[sheet_name] = excel_file.parse(sheet_name) # 打印每个sheet数据 for sheet_name, sheet_data in data.items(): print(f"Sheet '{sheet_name}':") print(sheet_data) 上述代码中,我们首先使用ExcelFile函数打开Excel文件,并使用sheet_names属性获取所有sheet的名称。然后,我们创建一个空的字典来存储每个sheet数据。 接下来,我们使用for循环遍历每个sheet的名称,并使用parse方法读取每个sheet数据。将每个sheet的名称作为字典的键,将每个sheet数据作为字典的值存储起来。 最后,我们使用for循环打印每个sheet数据。这样,我们就可以读取并打印出Excel文件中的多个sheet数据。 以上是使用Pythonpandas库来读取Excel文件中多个sheet数据的方法。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值