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

使用Python Pandas读取含公式的Excel列返回NaN问题求助

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

问题原因

你的Excel N列使用公式动态计算年份,但Pandas默认使用的读取引擎(如旧版xlrd)无法读取未保存计算结果的公式值,导致除表头外所有行返回NaN。如果Excel文件未保存公式计算后的数值,引擎会无法解析公式结果。

解决方案

方案1:改用openpyxl引擎读取

openpyxl支持读取Excel公式计算后的结果(只要Excel已自动计算过公式),只需在read_excel中指定引擎:

import pandas as pd

files = 'A_data.xlsx'
sheetName = "Sheet1"

# 使用openpyxl引擎读取指定列
df = pd.read_excel(files, sheet_name=sheetName, usecols='N', engine='openpyxl')
print(df)

方案2:手动触发公式计算(针对未自动计算的Excel文件)

如果Excel文件未自动计算公式,可通过openpyxl手动触发计算后再提取数据:

from openpyxl import load_workbook
import pandas as pd

files = 'A_data.xlsx'
sheetName = "Sheet1"

# 加载工作簿,禁用仅读取数据模式
wb = load_workbook(files, data_only=False)
ws = wb[sheetName]

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

# 提取N列数据转为DataFrame
# N列对应openpyxl的第14列(索引从1开始)
column_n = [cell.value for cell in ws['N']]
df = pd.DataFrame(column_n[1:], columns=[column_n[0]])
print(df)

提取唯一年份并写入O列

读取到正确的年份数据后,提取唯一年份并写入Excel的O列:

# 获取唯一年份
unique_years = df['Year'].unique()

# 写入O列
wb = load_workbook(files)
ws = wb[sheetName]

# 从O2行开始写入,自动填充
for row_num, year in enumerate(unique_years, start=2):
    ws[f'O{row_num}'] = year

# 保存修改
wb.save(files)

注意:确保已安装openpyxl库,若未安装可执行pip install openpyxl

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 07:44:55