Python Pandas - 如何在 Excel 表格中写入特定列

14

我使用pandas更新Excel表格时遇到了问题,通过在表格中写入新值来更新。我已经有一个现有的数据框df1,它从MySheet1.xlsx读取值。因此,这需要是一个新数据框,或者以某种方式复制并覆盖现有数据框。

电子表格格式如下:

enter image description here

我有一个Python列表:values_list = [12.34, 17.56, 12.45]。我的目标是在Col_C标题下垂直插入列表值。它目前会水平覆盖整个数据框,而不保留当前值。

df2 = pd.DataFrame({'Col_C': values_list})
writer = pd.ExcelWriter('excelfile.xlsx', engine='xlsxwriter')
df2.to_excel(writer, sheet_name='MySheet1')
workbook  = writer.book
worksheet = writer.sheets['MySheet1']
如何获得这个最终效果?谢谢!

enter image description here

2个回答

18

下面我提供了一个完全可复制的例子,展示如何使用pandas和openpyxl模块修改现有的.xlsx工作簿 (Openpyxl文档链接)

首先,为了演示目的,我创建了一个名为test.xlsx的工作簿:

from openpyxl import load_workbook
import pandas as pd
writer = pd.ExcelWriter('test.xlsx', engine='openpyxl') 
wb  = writer.book
df = pd.DataFrame({'Col_A': [1,2,3,4],
                  'Col_B': [5,6,7,8],
                  'Col_C': [0,0,0,0],
                  'Col_D': [13,14,15,16]})

df.to_excel(writer, index=False)
wb.save('test.xlsx')

在这一点上,预期的输出如下:

第一部分代码后的预期输出

在第二部分中,我们加载现有的工作簿('test.xlsx'),并修改第三列为不同的数据。

from openpyxl import load_workbook
import pandas as pd
df_new = pd.DataFrame({'Col_C': [9, 10, 11, 12]})
wb = load_workbook('test.xlsx')

ws = wb['Sheet1']

for index, row in df_new.iterrows():
    cell = 'C%d'  % (index + 2)
    ws[cell] = row[0]

wb.save('test.xlsx')

这是最终期望的输出结果:

在此输入图片描述


1
谢谢您的回复。这对我有用。您能否详细说明一下这行代码的含义:cell = 'C%d' % (index + 2)?在我的情况下,是否有任何方法可以将C替换为实际的标题名称,例如Col_C?谢谢! - kokodee
2
因此,对于 cell = 'C%d'%(index + 2),它将解析为单元格引用 - 即当 index = 0 时,cell ='C2',我认为您不应更改。 您可以将 ws [cell] = row [0] 更改为 ws [cell] = row ['Col_C'],它会起作用。 希望这回答了您的问题。 - patrickjlong1
@patrickjlong1 有没有办法找到你想读取的Excel表格中的活动单元格?或者在多个Excel表格中找到活动工作表? - Eswar
@Eswar。特定单元格-我不知道。对于特定行,您可以使用pandas.read_excel()上的usecols参数按名称或位置选择特定列。 - patrickjlong1
1
我有一个新手问题,wb是指工作簿吗?ws是指工作表吗?但是我不知道df是什么意思,我在其他地方看到过。你能告诉我吗? - Allex Radu
@Allex Radu,在这个例子中,df对象是一个Pandas数据框架 - patrickjlong1

13

在我看来,最简单的解决方案是将Excel读取为pandas数据框,然后修改它并写出为Excel。例如:

注释:

导入Pandas库作为pd。 将Excel表格读取为一个名为dataframe的pandas数据框。 将您要处理的数据(可能以列表格式存在)赋值到您想要的列中(请确保长度相同)。将数据框保存为Excel文件,可以覆盖旧的Excel文件或创建新的。

代码:

import pandas as pd
ExcelDataInPandasDataFrame = pd.read_excel("./YourExcel.xlsx")
YourDataInAList = [12.34,17.56,12.45]
ExcelDataInPandasDataFrame ["Col_C"] = YourDataInAList
ExcelDataInPandasDataFrame .to_excel("./YourNewExcel.xlsx",index=False)

3
这里需要注意的是,您将失去覆盖工作表中其他列可能存在的任何公式。 - Fabio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接