Python Pandas - 如何在 Excel 工作表的特定列中写入

Posted

技术标签:

【中文标题】Python Pandas - 如何在 Excel 工作表的特定列中写入【英文标题】:Python Pandas - How to write in a specific column in an Excel Sheet 【发布时间】:2018-09-15 19:25:07 【问题描述】:

我无法通过在其中写入新值来使用 pandas 更新 Excel 工作表。我已经有一个从 MySheet1.xlsx 读取值的现有框架 df1。所以这需要是一个新的数据框,或者以某种方式复制和覆盖现有的。

电子表格的格式如下:

我有一个 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']

如何得到这个最终结果?谢谢!

【问题讨论】:

【参考方案1】:

下面我提供了一个完全可重现的示例,说明如何使用 pandas 和 openpyxl 模块 (link to Openpyxl Docs) 修改现有的 .xlsx 工作簿。

首先,出于演示目的,我创建了一个名为 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')

这是最后的预期输出:

【讨论】:

感谢您的回复。这对我有用。您能否详细说明这一行:cell = 'C%d' % (index + 2)?无论如何我可以用实际的标题名称替换C,在我的情况下是Col_C?谢谢! 所以对于cell = 'C%d' % (index + 2),它解析为单元格引用——即当index = 0 时cell = 'C2',我认为你不应该改变它。您可以将ws[cell] = row[0] 更改为ws[cell] = row['Col_C'],它会起作用。希望这能回答您的问题。 感谢您的解释! @patrickjlong​​1 有没有办法在您想阅读的 Excel 工作表中找到活动单元格?还是一种在多个 Excel 工作表中查找活动工作表的方法?? @Eswar。一个特定的细胞 - 我不知道。对于特定行,您可以使用 pandas.read_excel() 上的 usecols 参数按名称或位置选择特定列。【参考方案2】:

在我看来,最简单的解决方案是将excel读取为熊猫的数据框,然后对其进行修改并写为excel。比如:

评论:

将 pandas 导入为 pd。 将 excel 表读入名为的 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)

【讨论】:

非常好的答案,用 pandas 清晰简单。非常感谢! 我确实发现这种方式比***评论更容易,谢谢!此外,如果您是故意这样做的,则不需要分号。 这里需要注意的是,您会丢失您正在覆盖的工作表的其他列中可能存在的任何公式。

以上是关于Python Pandas - 如何在 Excel 工作表的特定列中写入的主要内容,如果未能解决你的问题,请参考以下文章

如何在从 python 触发的电子邮件中将 pandas 数据框附加为 excel

Python Pandas - 如何在 Excel 工作表的特定列中写入

如何在python中使用pandas在现有的excel工作表中追加列

如何使用 Pandas 从 Excel 中读取某些列 - Python

如何根据计数器应用多个条件,并使用 pandas 和 python 在 excel 中为每个条件提供输出?

如何利用Python中的Pandas库绘制柱形图