【问题标题】:How to save DataFrame to Sheet2 in xlsx file如何在 xlsx 文件中将 DataFrame 保存到 Sheet2
【发布时间】:2020-05-28 00:18:05
【问题描述】:

我使用 Pandas 创建了一个简单的 DataFrame,我需要将它添加/替换到我的 Xlsx 文件中的 Sheet2。 Xlsx 文件中的工作表为:Sheet1、Sheet2 我有两个问题:

首先,即使我指定了 sheetName,它所做的只是删除数据库中已经存在的所有工作表,并仅创建一个具有数据指定名称的工作表。

其次,我无法从数据框中删除列索引。我尝试添加 'index_col=None' 但它所做的只是导致错误。

到目前为止的代码:

import pandas as pd
from pandas import ExcelWriter
from pandas import ExcelFile
import numpy as np

Number1 = '123456'
Number2 = '987654'
Number3 = '888888'
Comp = 'HelloAll'
excel_file = 'C:/Users/username/Desktop/testFile.xlsx'

data = {'Number1':  [Number1],
        'Number2':  [Number2],
        'Number3':  [Number3],
        'Comp':  [Comp]
        }

df = pd.DataFrame (data, columns = ['Number1','Number2', 'Number3', 'Comp'])
pd.set_option('display.max_columns', None)
print (df)
with ExcelWriter(excel_file) as writer:
    df.to_excel(writer, sheet_name='Sheet2')

预期结果:

Number1 Number2 Number3 Comp
123456  987654  888888  HelloAll

【问题讨论】:

标签: python python-3.x pandas dataframe


【解决方案1】:
#pip install openpyxl

writer = pd.ExcelWriter('output.xlsx')  
df.to_excel(writer,"Sheetnamethatyouwant")  
writer.save()  

编辑

#For adding new data

from openpyxl import load_workbook

path = r"path of xlsx that you want to add"
book = load_workbook(path)
writer = pd.ExcelWriter(path, engine = 'openpyxl')
writer.book = book

df.to_excel(writer, "sheetnamryouwant")
writer.save()

【讨论】:

  • 感谢您的回答,但这正是我的代码所做的。从文件中删除所有工作表,并创建具有指定名称的新工作表。我需要将所有工作表都保留在数据库中,并且只替换一张选定工作表(Sheet2)中的数据,
【解决方案2】:

1) 为了保留文件的工作表,您需要做的第一件事是导入所有工作表,然后重新编写它们。一种对我有用的方法是使用xlsxwriter

import pandas as pd

# Read the 1st sheet and import it as first dataframe
#df1 = pd.read_excel('testFile.xlsx', sheet_name='Sheet1')
df1 = pd.DataFrame({'A': [1,2,3], 'B': [4,5,6]}) # for this example i created a simple df

# Read the 2nd sheet and import it as second dataframe
#df2 = pd.read_excel('testFile.xlsx', sheet_name='Sheet2')

# Do some data manipulation
Number1 = '123456'
Number2 = '987654'
Number3 = '888888'
Comp = 'HelloAll'

data = {'Number1': [Number1],
        'Number2': [Number2],
        'Number3': [Number3],
        'Comp': [Comp]}

df2 = pd.DataFrame (data, columns = ['Number1','Number2', 'Number3', 'Comp'])

# Kickstart the xlsxwriter
writer = pd.ExcelWriter('testFile.xlsx', engine='xlsxwriter')
df1.to_excel(writer, sheet_name='Sheet1', index=False)
df2.to_excel(writer, sheet_name='Sheet2', index=False)

# Finally write the file
writer.save()

2) 关于第二个问题,只需在编写文件时使用参数 index=False。

【讨论】:

  • 这如描述的那样工作,谢谢。然而,我确实忘了提到 sheet1 的风格很重,它有很多合并的单元格、图像等。我想使用 sheet2 为 sheet1 绘制数据并简单地链接它们。用他们描述的方式,一切都很好,但是在我运行程序后,Sheet1 中的所有样式都被删除了。
  • 你好,Babi,你是对的,所有的格式都会被删除。在编写文件之前,您需要格式化所有工作表。 Xlsxwriter 是一个非常好的库,你也可以查看 Openpyxl。另一种选择是有一个宏并通过 excel 格式化工作表。
  • 我会研究这些选项。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-12
  • 2021-09-20
  • 1970-01-01
  • 2016-05-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-18
相关资源
最近更新 更多