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

Python Pandas读取Excel时保留开头带-的原始字符串方案问询

解决Excel中以“-”开头文本被解析为公式导致pandas读入成NaN的问题

以下是几个Python层面的可行方案,不用再依赖慢到离谱的VBA:

方案1:用pandas的converters参数强制转字符串

这是最简单高效的方法,直接指定目标列以字符串类型读取,跳过Excel的公式解析逻辑:

import pandas as pd

# 把需要处理的列(比如名为"回复内容"的列)强制转成字符串
df = pd.read_excel('调研数据.xlsx', converters={'回复内容': str})

如果不确定具体列,也可以给所有列加转换,但可能影响正常数值列,建议精准指定要处理的列。

方案2:用openpyxl读取原始单元格内容

Excel会把-I am sad today.这类内容当成公式(实际存储为=-I am sad today.),用openpyxl可以读取单元格的原始内容,再去掉开头的=还原文本:

import pandas as pd
from openpyxl import load_workbook

# 加载工作簿,data_only=False确保读取原始内容而非计算结果
wb = load_workbook('调研数据.xlsx', data_only=False)
ws = wb.active

# 遍历所有行处理数据
processed_data = []
for row in ws.iter_rows(values_only=True):
    cleaned_row = []
    for cell in row:
        cell_str = str(cell)
        # 识别并还原被当成公式的文本
        if cell_str.startswith('='):
            cleaned_row.append(cell_str[1:])
        else:
            cleaned_row.append(cell)
    processed_data.append(cleaned_row)

# 转成DataFrame,假设第一行是表头
df = pd.DataFrame(processed_data[1:], columns=processed_data[0])

方案3:针对旧版.xls文件用xlrd处理

如果你的数据是.xls格式,用xlrd可以直接识别公式类型单元格,提取原始文本:

import pandas as pd
import xlrd

wb = xlrd.open_workbook('调研数据.xls', on_demand=True)
ws = wb.sheet_by_index(0)

processed_data = []
for row_idx in range(ws.nrows):
    cleaned_row = []
    for col_idx in range(ws.ncols):
        cell = ws.cell(row_idx, col_idx)
        # 判断是否为公式单元格,是则提取文本并去掉开头的=
        if cell.ctype == xlrd.XL_CELL_FORMULA:
            cleaned_row.append(cell.value.lstrip('='))
        else:
            cleaned_row.append(cell.value)
    processed_data.append(cleaned_row)

df = pd.DataFrame(processed_data[1:], columns=processed_data[0])

优先推荐方案1,代码少且效率高,大数据量下也能快速处理;如果需要更灵活的单元格内容控制,再考虑方案2或3。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 08:25:47