python - Pandas 可以在不修改文件其余部分的情况下读取和修改单个 Excel 文件工作表(选项卡)吗?

标签 python excel pandas

许多电子表格都具有用于读写 Excel 文件的 Python 工具无法忠实再现的公式和格式。这意味着我想以编程方式创建的任何文件都必须是我基本上从头开始创建的,然后其他 Excel 文件(具有上述复杂性)必须引用该文件(这会产生各种其他依赖问题)。

我对 Excel 文件“选项卡”的理解是它们实际上只是 XML 文件的集合。那么,是否可以使用 pandas(或诸如 xlsxwriter 或 openpyxl 之类的底层读/写引擎之一来修改其中一个选项卡,而保留其他选项卡(其中包含更多邪恶的东西)完好无损?

编辑:我将尝试通过一个示例进一步阐明问题。

  • Excel Sheet test.xlsx 有四个选项卡(也称为工作表):Sheet1、Sheet2、Sheet3、Sheet4
  • 我使用 pandas.read_excel() 将 Sheet3 读入 DataFrame(我们称之为 df)
  • Sheet1 和 Sheet2 包含公式、图表和各种格式,openpyxl 和 xlrd 都无法成功解析,而 Sheet4 包含其他数据。我根本不想碰那些标签。
  • Sheet2 实际上对 Sheet3 上的单元格有一些引用
  • 我对 df 进行了一些编辑,现在想将其写回 sheet3,而其他工作表保持不变(并且工作簿中其他工作表对它的引用保持不变)

我可以这样做吗?如果可以,怎么做?

最佳答案

关于excel和python(特别是pandas)之间的交互我有一个类似的问题,我被提到了这个问题。

感谢 stackoverflow 社区的一些建议,我找到了一个名为 xlwings 的包。这似乎涵盖了 HaPsantran 所需的许多功能。

使用 OP 的例子:

使用现有的 excel 文件,您可以在要导入 pandas 的数据 block (Sheet3) 中放置一个 anchor ,方法是在 excel 中命名它并执行以下操作:

# opened an existing excel file

wb = 工作簿(现有文件)

# Find in the excel file a named cell and reach the boundary of the cell block (boundary defined by empty column / row) and read the cell 

df = Range(Anchor).table.value

# import pandas and manipulate the data block
df = pd.DataFrame(df) # into Pandas DataFrame
df['sum'] = df.sum(axis= 1)

# write back to Sheet3
Range(Anchor).value = df.values

测试此实现没有调整 excel 文件中的现有公式

让我知道这是否能解决您的问题,如果有什么我可以帮助的。

非常感谢 xlwings 的开发者,他们让这一切成为可能。


以下是在@jamzsabb 提出进一步问题后对我之前回答的更新,并反射(reflect)在 xlwings 更新到 >= 0.9.0 后更改的 API。

import xlwings as xw
import pandas as pd
target_df = xw.Range('A7').options(pd.DataFrame, expand='table').value # only do this if the 'A7' cell (the cell within area of interest) is in active worksheet
#otherwise do:
#sht = xw.Book(r'path to your xlxs file\name_of_file.xlsx`).sheets['name of sheet']
#target_df = sht.Range('A7').options(pd.DataFrame, expand='table').value # you can also change 'A7' to any name that you've given to a cell like 'interest_table`

关于python - Pandas 可以在不修改文件其余部分的情况下读取和修改单个 Excel 文件工作表(选项卡)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28142420/

相关文章:

python - Django 应用程序中是否需要迁移?

java - 数据格式自动转换为父子格式

python - 特定区域的 Foursquare field

python - 定义函数后导入模块

python - 使用 Python 生成模拟输入文件

vba - 保存为文本时使用逗号而不是点来表示小数

python - 以特定格式提取 Excel 数据作为 python 文件的输入

python - 从多索引数据框中删除列

python - 使用 CSV 数据文件 Sklearn 的简单线性回归

Python Matplotlib x 轴不正确地标记 timedelta64 对象