有没有办法让pandas只读取excel的值,而不是公式?它以NaN形式读取公式,除非我进入并在运行代码之前手动保存excel文件。我正在使用pandas的基本读取excel函数,
import pandas as pd
df = pd.read_excel(filename, sheetname="Sheet1")
如果我在运行代码之前进入并保存了文件,这将读取值。但是在运行代码以更新新工作表之后,如果我在执行此操作后不进入并保存文件并尝试再次运行,则会将公式读取为NaN而不是仅读取值。是否有任何人都知道的解决方案只是从大熊猫中读取excel的值?
答案 0 :(得分:2)
这很奇怪。 pandas的正常行为是读取值,而不是公式。可能,问题出在你的excel文件中。可能你的公式指向其他文件,或者它们返回一个pandas视为nan的值。
在第一种情况下,需要更新工作表,并且熊猫无法做到这一点(但请继续阅读)。
在第二种情况下,您可以通过在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.save(不同位置))。然后你可以用shutil摆脱临时文件。
答案 1 :(得分:0)
我遇到了这个问题,并通过将图形移动到正在读取的第一行下方来解决此问题。看起来图的位置可能会引起问题。
答案 2 :(得分:0)
您可以使用 xlrd 来读取值。 首先,您应该刷新 Excel 工作表,您还可以使用 python 自动更新值。你可以使用下面的功能 文件 = 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)
您可以循环遍历但需要数据。并在读取数据时设置条件。更大的灵活性