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
相关产品推荐
相关产品推荐

