You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用pandas read_excel读取含公式单元格返回NaN,如何获取实际值?

解决pandas读取Excel公式列返回NaN的问题

出现这个问题的核心原因是:默认情况下,pandas依赖的openpyxl引擎读取xlsx文件时,只会读取单元格的存储值——如果Excel中的公式未被计算并保存到文件中,就会返回NaN。

以下是两种可行的解决方法:

方法一:读取已保存的计算结果

如果Excel文件已经保存过公式计算后的结果,直接在pd.read_excel中通过engine_kwargs传递data_only=True参数,让openpyxl读取单元格的显示值(即公式计算结果):

path = r"C:\Users\Adam\Desktop\Stock Trackers\New folder\New folder\Stock Tracker WK36 mTeam.xlsx"

df = pd.read_excel(
    path,
    usecols="A:D,R",
    index_col=None,
    engine="openpyxl",
    engine_kwargs={"data_only": True}
)

注意:如果Excel文件从未保存过公式计算结果(比如编辑后直接关闭没保存),这个方法依然会返回NaN,需要先打开Excel按F9刷新公式,保存文件后再执行代码。

方法二:手动触发公式计算

如果无法提前保存Excel文件,可以直接用openpyxl加载工作簿并触发公式计算,再转换为DataFrame:

from openpyxl import load_workbook
import pandas as pd

path = r"C:\Users\Adam\Desktop\Stock Trackers\New folder\New folder\Stock Tracker WK36 mTeam.xlsx"

# 加载工作簿,禁用data_only确保能读取公式并计算
wb = load_workbook(filename=path, data_only=False)
ws = wb.active

# 触发所有公式计算
wb.calculate_dimension()

# 提取A-D和R列的数据(假设第一行是表头)
rows = []
for row in ws.iter_rows(min_row=2, values_only=True):
    # A列索引0,B1,C2,D3,R列是第18列(Excel列号转索引减1)
    rows.append([row[0], row[1], row[2], row[3], row[17]])

# 转为DataFrame
df = pd.DataFrame(rows, columns=["A", "B", "C", "D", "R"])

内容的提问来源于stack exchange,提问作者user20777937

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 14:55:19