Skip to main content
 首页 » 编程设计

python之使用 pandas 保持格式的同时覆盖 excel 列

2025年05月04日21hnrainll

我正在处理一个看起来像这样的 xlsx 文件:

我之前的任务是修改名为“条目 1”和“条目 2”的列。我已将这些列存储在原始数据框的单独切片中,以便更好地了解。我将让您快速了解一下这个切片的外观:

>>> slice = df.loc[:, 'Entry 1':'Entry 2'] 
# code to modify the values 
>>> slice 
 
    Entry 1     Entry 2 
1   Modified 1  Value 1 
2   Modified 2  Value 2 
3   Modified 3  Value 3  

我现在想用指定的切片覆盖原始数据框中的那些列。我已经通过使用以下方法实现了这一点:

df.loc[:, 'Entry1':'Entry2'] = slice 

问题

如您所见,列的标题具有特殊格式。如何覆盖“Entry1”和“Entry2”中的值,不包括 header ,以保持格式?

请您参考如下方法:

完全披露:我是建议库的作者

不幸的是,pandas 中没有开箱即用的方法来实现这一点,因为它不加载样式数据。您可以使用 StyleFrame (包装了 pandas 和 openpyxl,我假设您已经安装了它们)可以读取 xlsx 文件,同时保留(大部分)样式元素。

在这种情况下使用它可能如下所示:

from StyleFrame import StyleFrame 
 
sf = StyleFrame.read_excel('test.xlsx', read_style=True) 
# currently you have to specify each value manually, 
# using slices will revert to the default style used by StyleFrame 
sf.loc[0, 'Entry 1'].value = 'Modified 1' 
sf.loc[1, 'Entry 1'].value = 'Modified 2' 
sf.loc[2, 'Entry 1'].value = 'Modified 3' 
sf.to_excel('test.xlsx').save() 

另一种使用循环的方法:

sf = StyleFrame.read_excel('test.xlsx', read_style=True, use_openpyxl_styles=False) 
new_values = ['Modified 1', 'Modified 2', 'Modified 3'] 
for cell, new_value in zip(sf['Entry 1'], new_values): 
    cell.value = new_value 
sf.to_excel('test.xlsx').save() 

test.xlsx执行前的内容:

及之后: