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

Python中优雅处理科学计数法格式电话号码的方法

问题描述

原始的phone_number列数据如下:

phone_number
--------------
001 1234567890
380 1234567890
 27 1234567890
001 +11234567890
2.56898E+11
1 1234567890
123-456-7890
 +1 (123) 456-7890
(123) 456-7890
NaN

执行以下清理步骤后:

character = '[^0-9]+'
df.phone_number.str.replace(character, '')

得到的结果中出现了科学计数法格式的字符串,无法直接用于后续电话号码处理:

phone_number
--------------
11234567890
3.80123E+12
2.71234E+11
11234567890
2.56898E+11
11234567890
1234567890
11234567890
1234567890
NaN

需要将科学计数法格式的结果转换为11位及以上的纯数字字符串,用于后续国际/美国电话号码处理。

解决方案

可以通过自定义处理函数结合apply方法,一站式处理空值、科学计数法转换和非数字字符清理,逻辑清晰且易扩展:

import pandas as pd
import numpy as np

def clean_phone_number(phone):
    # 处理空值
    if pd.isna(phone):
        return np.nan
    # 统一转为字符串并去除首尾空格
    phone_str = str(phone).strip()
    # 处理科学计数法格式
    if 'E' in phone_str.upper():
        try:
            # 先转浮点数再转整数,消除科学计数法
            phone_num = int(float(phone_str))
            phone_str = str(phone_num)
        except ValueError:
            # 转换失败则保留原始字符串继续清理
            pass
    # 仅保留数字字符
    return ''.join(filter(str.isdigit, phone_str))

# 应用到数据列
df['cleaned_phone'] = df['phone_number'].apply(clean_phone_number)

处理效果说明

  • 科学计数法格式的数值(如2.56898E+11)会被转换为完整数字字符串256898000000
  • 带空格、符号的电话号码会被清理为纯数字(如+1 (123) 456-7890→11234567890)
  • 空值NaN会被保留,不影响后续处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 12:25:21