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

使用Pandas读取Excel时手机号被误判为日期报错求助

解决Pandas读取Excel时手机号列被识别为日期的报错问题

问题根源

你的Excel文件中DID列的单元格格式被设置为日期类型,但11位手机号对应的Excel日期序列号超出了Excel支持的有效日期范围(1900-01-01至9999-12-31),导致openpyxl读取时触发警告并将单元格标记为错误。dtype=str和converters参数无法提前阻止openpyxl的日期解析行为,所以警告依然出现。

可行解决方案

方案1:使用xlrd引擎读取(简单直接)

xlrd对日期格式的处理逻辑和openpyxl不同,不会触发这类警告。注意需要安装旧版本xlrd(2.0+版本不再支持xlsx格式):

pip install xlrd==1.2.0

然后读取:

import pandas as pd
df = pd.read_excel('file_name.xlsx', dtype={'DID': str}, engine='xlrd')

方案2:用openpyxl预修正单元格格式

如果必须使用openpyxl引擎,可以先加载Excel文件,将目标列的单元格格式强制改为文本,并恢复错误单元格的原始数值:

from openpyxl import load_workbook
import pandas as pd

# 加载工作簿
wb = load_workbook('file_name.xlsx')
ws = wb.active

# 处理I列(对应DID列,根据实际列位置调整)
for cell in ws['I']:
    # 设置单元格格式为文本
    cell.number_format = '@'
    # 恢复错误单元格的原始数值
    if cell.data_type == 'e':
        cell.value = cell.value.args[0]

# 保存修正后的文件
wb.save('fixed_file.xlsx')

# 读取修正后的文件
df = pd.read_excel('fixed_file.xlsx', dtype={'DID': str})

方案3:忽略警告并提取错误单元格值

如果不想修改原文件,也可以直接捕获警告,并将错误单元格的原始数值提取出来:

import warnings
import pandas as pd

# 忽略openpyxl的日期范围警告
warnings.filterwarnings('ignore', category=UserWarning, module='openpyxl')

# 自定义转换器处理错误单元格
def fix_phone_number(x):
    # 如果是错误类型,提取原始序列号并转为字符串
    if isinstance(x, Exception):
        return str(x.args[0]).split('.')[0]
    return str(x)

df = pd.read_excel('file_name.xlsx', converters={'DID': fix_phone_number})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 07:30:09