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

使用pd.read_csv读取csv文件同列手机号部分末尾带.0问题求助

问题原因

CSV属于纯文本文件,本身不存储单元格的格式类型信息。你遇到的带.0后缀问题,是因为手机号列存在空值时,pandas读取阶段会默认将整列推断为float64类型(int类型无法兼容NaN空值),后续即使强制转换为字符串类型,数值形式的手机号就会自动带上.0后缀,空值会转为nan字符串。Excel打开CSV时默认隐藏了数值的小数位,因此你看不到.0后缀。

解决方案

方案1:读取阶段直接清洗(推荐)

使用converters参数在读取文件的同时对手机号列做清洗,从根源避免类型推断导致的格式异常:

import pandas as pd

def clean_phone(val):
    # 空值直接返回空字符串
    if pd.isna(val) or str(val).strip() in ('', 'nan'):
        return ''
    # 处理float类型的手机号
    if isinstance(val, float):
        return str(int(val))
    # 字符串类型的手机号直接去除末尾.0
    return val.rstrip('.0')

df = pd.read_csv(
    'Member_Contact_Info.csv',
    converters={
        'Priority_Cell': clean_phone,
        'Priority_Home': clean_phone
    }
)

方案2:读取完成后批量清洗

适合手机号列较多的场景,统一对所有手机号列做格式修正:

import pandas as pd

df = pd.read_csv('Member_Contact_Info.csv', dtype=str)
phone_cols = ['Priority_Cell', 'Priority_Home']

for col in phone_cols:
    # 先替换空值对应的nan字符串,再移除末尾.0
    df[col] = df[col].replace('nan', '').str.rstrip('.0')

特殊场景适配

如果你的数据存在开头带0的手机号、固话或海外号码,不要直接转int避免丢失开头的0,使用正则替换处理即可:

df[col] = df[col].replace('nan', '').str.replace(r'\.0$', '', regex=True)

内容的提问来源于stack exchange,提问作者Major-Payne-2000

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 22:57:02