python另存为excel_python-如何使用Pandas将新工作表保存在现有的excel文件中?

python-如何使用Pandas将新工作表保存在现有的excel文件中?

我想使用Excel文件来存储用python制作的数据。 我的问题是我无法将图纸添加到现有的excel文件中。 在这里,我建议使用示例代码来解决此问题

import pandas as pd

import numpy as np

path = r"C:\Users\fedel\Desktop\excelData\PhD_data.xlsx"

x1 = np.random.randn(100, 2)

df1 = pd.DataFrame(x1)

x2 = np.random.randn(100, 2)

df2 = pd.DataFrame(x2)

writer = pd.ExcelWriter(path, engine = 'xlsxwriter')

df1.to_excel(writer, sheet_name = 'x1')

df2.to_excel(writer, sheet_name = 'x2')

writer.save()

writer.close()

此代码将两个DataFrame保存到两个表中,分别命名为“ x1”和“ x2”。如果我创建了两个新的DataFrames并尝试使用相同的代码添加两个新的床单,“X3”和“X4”,原始数据丢失。

import pandas as pd

import numpy as np

path = r"C:\Users\fedel\Desktop\excelData\PhD_data.xlsx"

x3 = np.random.randn(100, 2)

df3 = pd.DataFrame(x3)

x4 = np.random.randn(100, 2)

df4 = pd.DataFrame(x4)

writer = pd.ExcelWriter(path, engine = 'xlsxwriter')

df3.to_excel(writer, sheet_name = 'x3')

df4.to_excel(writer, sheet_name = 'x4')

writer.save()

writer.close()

我想要一个具有四张纸的Excel文件:“ x1”,“ x2”,“ x3”,“ x4”。我知道“ xlsxwriter”不是唯一的“引擎”,而是“ openpyxl”。 我还看到已经有其他人对此问题进行了写作,但是我仍然不知道如何做到这一点。

这是从此链接获取的代码

import pandas

from openpyxl import load_workbook

book = load_workbook('Masterfile.xlsx')

writer = pandas.ExcelWriter('Masterfile.xlsx', engine='openpyxl')

writer.book = book

writer.sheets = dict((ws.title, ws) for ws in book.worksheets)

data_filtered.to_excel(writer, "Main", cols=['Diff1', 'Diff2'])

writer.save()

他们说这行得通,但是很难弄清楚如何做到。 我不了解在此上下文中的“ ws.title”,“ ws”和“ dict”是什么。

保存“ x1”和“ x2”,然后关闭文件,再次打开并添加“ x3”和“ x4”的最佳方法是什么?

7个解决方案

66 votes

谢谢。 我相信,一个完整的示例可能会对遇到相同问题的其他人有所帮助:

import pandas as pd

import numpy as np

path = r"C:\Users\fedel\Desktop\excelData\PhD_data.xlsx"

x1 = np.random.randn(100, 2)

df1 = pd.DataFrame(x1)

x2 = np.random.randn(100, 2)

df2 = pd.DataFrame(x2)

writer = pd.ExcelWriter(path, engine = 'xlsxwriter')

df1.to_excel(writer, sheet_name = 'x1')

df2.to_excel(writer, sheet_name = 'x2')

writer.save()

writer.close()

根据我的理解,在这里我生成了一个excel文件,无论它是通过“ xslxwriter”还是“ openpyxl”引擎生成的,都没有关系。

当我想写而不丢失原始数据时

import pandas as pd

import numpy as np

from openpyxl import load_workbook

path = r"C:\Users\fedel\Desktop\excelData\PhD_data.xlsx"

book = load_workbook(path)

writer = pd.ExcelWriter(path, engine = 'openpyxl')

writer.book = book

x3 = np.random.randn(100, 2)

df3 = pd.DataFrame(x3)

x4 = np.random.randn(100, 2)

df4 = pd.DataFrame(x4)

df3.to_excel(writer, sheet_name = 'x3')

df4.to_excel(writer, sheet_name = 'x4')

writer.save()

writer.close()

此代码可以完成工作!

Stefano Fedele answered 2020-02-12T03:22:23Z

14 votes

在您共享的示例中,您将现有文件加载到book中,并将writer.book值设置为x1。在x2行中,您将工作簿中的每个工作表都访问为x3。工作表标题为x4,因此您将创建一个字典 {sheet_titles: sheet}键,值对。 然后将此词典设置为writer.sheets。 本质上,这些步骤只是从x1加载现有数据,并使用它们填充您的编写器。

现在,假设您已经有一个包含x1和x2作为文件的文件。 您可以使用示例代码加载文件,然后可以执行类似的操作来添加x3和x4。

path = r"C:\Users\fedel\Desktop\excelData\PhD_data.xlsx"

writer = pd.ExcelWriter(path, engine='openpyxl')

df3.to_excel(writer, 'x3', index=False)

df4.to_excel(writer, 'x4', index=False)

writer.save()

那应该做您想要的。

Grr answered 2020-02-12T03:22:53Z

9 votes

一个简单的示例,一次可以写入多个数据以使其表现出色。 而且,当您要将数据附加到书面excel文件(关闭的excel文件)上的工作表时。

当您是第一次向Excel写作时。 (将“ df1”和“ df2”写入“ 1st_sheet”和“ 2nd_sheet”)

import pandas as pd

from openpyxl import load_workbook

df1 = pd.DataFrame([[1],[1]], columns=['a'])

df2 = pd.DataFrame([[2],[2]], columns=['b'])

df3 = pd.DataFrame([[3],[3]], columns=['c'])

excel_dir = "my/excel/dir"

with pd.ExcelWriter(excel_dir, engine='xlsxwriter') as writer:

df1.to_excel(writer, '1st_sheet')

df2.to_excel(writer, '2nd_sheet')

writer.save()

关闭excel,但是希望将数据“附加”到同一excel文件中但又插入到另一张工作表后,让工作表名称“ 3rd_sheet”说“ df3”。

book = load_workbook(excel_dir)

with pd.ExcelWriter(excel_dir, engine='openpyxl') as writer:

writer.book = book

writer.sheets = dict((ws.title, ws) for ws in book.worksheets)

## Your dataframe to append.

df3.to_excel(writer, '3rd_sheet')

writer.save()

需要注意的是,excel格式不能为xls,可以使用xlsx之一。

Wong Tat Yau answered 2020-02-12T03:23:27Z

7 votes

我强烈建议您直接使用openpyxl,因为它现在支持Pandas DataFrames。

这使您可以专注于相关的Excel和Pandas代码。

Charlie Clark answered 2020-02-12T03:23:51Z

0 votes

您可以将自己感兴趣的现有工作表(例如“ x1”,“ x2”)读入内存,然后在添加更多新工作表之前将它们“写”回(请注意,文件中的工作表和内存中的工作表是两个不同的工作表 东西,如果您不阅读它们,它们将会丢失)。 此方法仅使用“ xlsxwriter”,不涉及openpyxl。

import pandas as pd

import numpy as np

path = r"C:\Users\fedel\Desktop\excelData\PhD_data.xlsx"

# begin <== read selected sheets and write them back

df1 = pd.read_excel(path, sheet_name='x1', index_col=0) # or sheet_name=0

df2 = pd.read_excel(path, sheet_name='x2', index_col=0) # or sheet_name=1

writer = pd.ExcelWriter(path, engine='xlsxwriter')

df1.to_excel(writer, sheet_name='x1')

df2.to_excel(writer, sheet_name='x2')

# end ==>

# now create more new sheets

x3 = np.random.randn(100, 2)

df3 = pd.DataFrame(x3)

x4 = np.random.randn(100, 2)

df4 = pd.DataFrame(x4)

df3.to_excel(writer, sheet_name='x3')

df4.to_excel(writer, sheet_name='x4')

writer.save()

writer.close()

如果要保留所有现有工作表,则可以在开头和结尾之间替换以下代码:

# read all existing sheets and write them back

writer = pd.ExcelWriter(path, engine='xlsxwriter')

xlsx = pd.ExcelFile(path)

for sheet in xlsx.sheet_names:

df = xlsx.parse(sheet_name=sheet, index_col=0)

df.to_excel(writer, sheet_name=sheet)

Jonathan L answered 2020-02-12T03:24:17Z

0 votes

#This program is to read from excel workbook to fetch only the URL domain names and write to the existing excel workbook in a different sheet..

#Developer - Nilesh K

import pandas as pd

from openpyxl import load_workbook #for writting to the existing workbook

df = pd.read_excel("urlsearch_test.xlsx")

#You can use the below for the relative path.

# r"C:\Users\xyz\Desktop\Python\

l = [] #To make a list in for loop

#begin

#loop starts here for fetching http from a string and iterate thru the entire sheet. You can have your own logic here.

for index, row in df.iterrows():

try:

str = (row['TEXT']) #string to read and iterate

y = (index)

str_pos = str.index('http') #fetched the index position for http

str_pos1 = str.index('/', str.index('/')+2) #fetched the second 3rd position of / starting from http

str_op = str[str_pos:str_pos1] #Substring the domain name

l.append(str_op) #append the list with domain names

#Error handling to skip the error rows and continue.

except ValueError:

print('Error!')

print(l)

l = list(dict.fromkeys(l)) #Keep distinct values, you can comment this line to get all the values

df1 = pd.DataFrame(l,columns=['URL']) #Create dataframe using the list

#end

#Write using openpyxl so it can be written to same workbook

book = load_workbook('urlsearch_test.xlsx')

writer = pd.ExcelWriter('urlsearch_test.xlsx',engine = 'openpyxl')

writer.book = book

df1.to_excel(writer,sheet_name = 'Sheet3')

writer.save()

writer.close()

#The below can be used to write to a different workbook without using openpyxl

#df1.to_excel(r"C:\Users\xyz\Desktop\Python\urlsearch1_test.xlsx",index='false',sheet_name='sheet1')

nileshk611 answered 2020-02-12T03:24:41Z

0 votes

实现此目的的另一种相当简单的方法是制作如下方法:

def _write_frame_to_new_sheet(path_to_file=None, sheet_name='sheet', data_frame=None):

book = None

try:

book = load_workbook(path_to_file)

except Exception:

logging.debug('Creating new workbook at %s', path_to_file)

with pd.ExcelWriter(path_to_file, engine='openpyxl') as writer:

if book is not None:

writer.book = book

data_frame.to_excel(writer, sheet_name, index=False)

这里的想法是将工作簿加载到path_to_file(如果存在)中,然后将data_frame附加为具有sheet_name的新工作表。 如果工作簿不存在,则会创建它。 似乎都没有openpyxl或xlsxwriter附加,因此如上面@Stefano的示例中所示,您确实必须加载然后重写才能附加。

MrMajestyk answered 2020-02-12T03:25:08Z

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
课程概述教会学员快速学会python数据分析,覆盖python基础,pandas,seaborn,matplotlib,SQL,sqlite,lambda等知识。课程是数据科学家居家必备的军火库。课程定期更,大部分视频分辨率支持2K超清,学员可以看清每一行代码。 适合人群python数据科学从业人员,数据分析师,统计 学习计划和方法1.每天保证1-2个小时学习时间,预计7-15天左右可以学习完整门课程(不同基础学生时间差异较大)。2.每节课的代码实操要保证,建议不要直接复制粘贴代码,自己实操一遍代码对大脑记忆很重要,有利于巩固知识。3.第二次学习时要总结上一节课内容,必要时做好笔记,加深大脑理解。4.不懂问题要罗列出来,先自己上网查询,查不到的可以咨询老师。 作者介绍Toby,持牌照金融公司担任模型验证专家,国内最大医药数据数据挖掘部门负责人!和清华大学出版社,重庆儿科医院,科院教授,赛柏蓝保持慢病数据挖掘项目合作!管理过欧美日印巴西等国外药典数据库,马丁代尔数据库,FDA溶解度数据库,临床试验数据库,WHO药物预警等数据库。原创公众号(python风控模型) 课程概述教会学员快速学会python数据分析,覆盖python基础,pandas,seaborn,matplotlib,SQL,sqlite,lambda等知识。课程是数据科学家居家必备的军火库。课程定期更,大部分视频分辨率支持2K超清,学员可以看清每一行代码。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值