pandas可以阅读和修改一个Excel文件工作表(选项卡),而无需修改文件的其余部分?
许多电子表格都有公式和格式,用于读取和写入Excel文件的Python工具不能忠实地重现。 这意味着我想要以编程方式创build的任何文件都必须是我从头开始创build的,然后其他Excel文件(具有上述复杂性)必须引用该文件(这会创build各种其他依赖项问题)。
我对Excel文件“选项卡”的理解是,它们实际上只是XML文件的集合。 那么,是否有可能使用pandas(或基本的读/写引擎之一,如xlsxwriter或openpyxl修改只是其中一个标签,其他标签(有更多邪恶的东西在那里)完好?
编辑:我会尝试进一步阐明一个例子的问题。
- Excel工作表test.xlsx有四个选项卡(即工作表):Sheet1,Sheet2,Sheet3,Sheet4
- 我使用pandas.read_excel()将Sheet3读入DataFrame(我们称之为df)
- Sheet1和Sheet2包含公式,graphics以及各种格式,而且openpyxl和xlrd都不能成功parsing,而Sheet4包含其他数据。 我根本不想触摸这些标签。
- Sheet2实际上有一些对Sheet3单元格的引用
- 我对df进行了一些编辑,现在想把它写回到sheet3中,而不改变其他工作表(以及工作簿中其他工作表的引用)
我可以这样做,如果是这样,怎么办?
关于excel和python(特别是大pandas)之间的交互,我也有类似的问题,我提到了这个问题。
感谢stackoverflow社区的一些指针,我发现了一个名为xlwings的包,似乎涵盖了HaPsantran所需要的很多function。
要使用OP的例子:
使用现有的excel文件,可以通过在excel中命名将数据块(Sheet3)中的一个锚点放入要导入到pandas的数据块中,并执行以下操作:
# opened an existing excel file
wb = Workbook(Existing_file)
# 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
testing这个实现没有在excel文件中调整现有的公式
让我知道这是否解决了你的问题,如果有什么我可以帮忙。
对xlwings的开发者的巨大赞誉,他们使这成为可能。
在@jamzsabb进一步提问之后,下面是我之前回答的一个更新,并在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`
我有90%的信心,“ pandas
做到这一点”的答案是否定的。 发表一个消极的是很难的,因为总有可能是我错过了一些聪明的东西,但是这里有一个例子:
可能的接口引擎是xlrd/xlwt/xlutils
, openpyxl
和xlsxwriter
。 没有可用于您的目的,因为xlrd/wt
不支持所有公式, xlsxwriter
不能修改现有的xlsx
文件,并且openpyxl
会丢失图像和图表。
由于我经常需要这样做,所以我只是把简单的输出写到一个单独的文件中,然后直接调用win32api来复制工作簿之间的数据,同时保留我所有同事的shiny数字。 这是烦人的,因为这意味着我必须在Windows下而不是* nix,但它的工作原理。
如果你在Windows下工作,你可以做类似的事情。 (我想知道在这种情况下使用这种方法来添加一个本地插入选项是否合理,或者我们应该简单地发布一个配方。)
PS:这个问题已经让我不时兴奋,因为我曾经想过学习足够的现代Excel格式来为其中一个库添加支持。
PPS:但是由于忽略了你没有处理的东西,并且没有修改的东西似乎很容易,但似乎没有人支持它,这让我觉得有一些令人头痛的问题,而Redmond的参与我也很乐意相信。 如果约翰·马辛想知道详细信息
如果您将“工作表”称为“选项卡”,则可以通过使用parse(sheet_name)
函数访问特定选项卡来修改其中一个选项卡。
这里是一个例子: 使用pandas在python中读取Excel文件
写回excel,(同时控制表)使用to_excel
函数,在这里: http : to_excel