有没有办法让pandas只读入excel中的值而不读入公式?它以NaN格式读取公式,除非我在运行代码之前进入并手动保存excel文件。我只是在使用pandas的基本read excel功能,
import pandas as pd
df = pd.read_excel(filename, sheetname="Sheet1")如果我在运行代码之前已经进入并保存了文件,这将读取这些值。但是在运行代码来更新新工作表之后,如果我没有在更新后保存文件并尝试再次运行,它会将公式读取为NaN,而不仅仅是值。有没有任何人都知道的工作,可以从excel中读取熊猫的值?
发布于 2017-01-19 06:18:02
这很奇怪。熊猫的正常行为是读取数值,而不是公式。问题很可能出在您的excel文件中。可能您的公式指向其他文件,或者它们返回一个pandas认为是nan的值。
在第一种情况下,工作表需要更新,而pandas对此无能为力(但请继续阅读)。
在第二种情况下,您可以通过在read_excel中设置显式的NaN值来解决:
pd.read_excel(path, sheetname="Sheet1", na_values = [your na identifiers])至于第一种情况,作为一种使您的工作更容易的变通解决方案,您可以使用xlwing手动自动化正在执行的操作:
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去掉临时文件了。
发布于 2019-05-08 22:59:52
我遇到了这个问题,我通过在我正在阅读的第一行下面移动一个图表来解决它。看起来图形的位置可能会导致问题。
发布于 2021-01-29 20:58:40
您可以使用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)您可以按您需要的方式遍历数据。并在读取数据时设置条件。更大的灵活性
https://stackoverflow.com/questions/41722374
复制相似问题