pandas读取excel值而不是公式

vsmadaxz  于 2023-11-20  发布在  其他
关注(0)|答案(4)|浏览(203)

有没有一种方法可以让pandas只从excel中读入值而不读入公式?它会以NaN的形式读入公式,除非我在运行代码之前手动保存excel文件。我只是在使用pandas的基本read excel函数,

import pandas as pd

df = pd.read_excel(filename, sheetname="Sheet1")

字符串
如果我在运行代码之前已经进入并保存了文件,这将读取值。但是在运行代码以更新新工作表之后,如果我在这样做之后没有进入并保存文件并尝试再次运行,它将以NaN读取公式而不仅仅是值。有没有任何人知道的解决方法可以只从Excel中读取值?

o8x7eapl

o8x7eapl1#

这很奇怪。pandas的正常行为是读取值,而不是公式。很可能,问题出在您的excel文件中。可能您的公式指向其他文件,或者它们返回的值被pandas视为nan。
在第一种情况下,工作表需要更新,pandas对此无能为力(但请继续阅读)。
在第二种情况下,您可以通过在read_excel中设置显式的nan值来解决:

pd.read_excel(path, sheetname="Sheet1", na_values = [your na identifiers])

字符串
对于第一种情况,作为一种使您的工作更轻松的解决方案,您可以使用xlwings手动自动化您正在做的事情:

import pandas as pd
import xlwings as xl

def df_from_excel(path):
    app = xl.App(visible=False)
    book = app.books.open(path)
    book.save()
    app.kill()
    return pd.read_excel(path)

df = df_from_excel(path to your file)


如果你想把这些公式保存在excel文件中,只需要把文件保存在不同的位置(book.保存(不同的位置))。然后你就可以用shutil去掉这些临时文件。

bttbmeg0

bttbmeg02#

我遇到了这个问题,我通过将一个图形移到我正在阅读的第一行下面来解决它。看起来图形的位置可能会导致问题。

daolsyd0

daolsyd03#

你可以使用xlrd来读取值.首先你应该刷新你的excel工作表你也是用python自动更新值.你可以使用下面的函数file = myxl.xls

import xlrd
import win32com.client
import os

def refresh_file(file):
    xlapp = win32com.client.DispatchEx("Excel.Application")
    path = os.path.abspath(file)
    wb =  xlapp.Wordbooks.Open(path)
    wb.RefreshAll()
    xlapp.CalculateUntilAsyncqueriesDone()
    wb.save()
    xlapp.Quit()

字符串
文件刷新后,您可以开始阅读内容。

workbook = xlrd.open_workbook(file)
worksheet = workbook.sheet_by_index(0)
for rowid in range(worksheet.nrows):
    row = worksheet.row(rowid)
    for colid, cell in enumerate(row):
        print(cell.value)


你可以循环通过你需要的数据。并把条件,而你是阅读数据。更多的灵活性

mqkwyuun

mqkwyuun4#

我有完全相同的问题,但我发现(在我的情况下)没有问题。
我使用EXCEL VIEWER扩展名。在带有该扩展名的Excel文件中查找,如果您单击写有“#NAME?”的单元格,则看起来值不在那里,而是公式在那里。
无论如何.在做了pd.read_excel之后,这个框架工作正常。

相关问题