Python/Pandas将DataFrame写入CSV时保留手机号格式避免科学计数法
解决方案
核心原因是电话号码作为长整数被pandas默认识别为数值类型,超过长度阈值就会自动转为科学计数法,电话号码属于标识类数据,全程用字符串类型存储即可解决问题,分写入、读取两个环节处理:
写入环节操作
- 写入前先将
phone列强制转换为字符串类型,若原列为数值类型,可先格式化去掉小数后缀,避免出现12022668000.0这类异常格式:
# 转换phone列为字符串格式,保留原始号码 df['phone'] = df['phone'].apply(lambda x: f"{x:.0f}" if pd.notna(x) else x).astype(str)
- 原有
to_csv逻辑无需额外修改,直接写入即可:
df.to_csv(r'yelp_data.csv', index = False, header=True)
读取环节操作
读取时通过dtype参数指定phone列按字符串类型解析,避免pandas自动识别为数值类型:
pd.read_csv('yelp_data.csv', dtype={'phone': str})
额外说明
如果需要用Excel打开生成的CSV不显示科学计数法,可以在写入时给手机号前加不可见的制表符\t,修改转换逻辑即可:
df['phone'] = df['phone'].apply(lambda x: f"\t{x:.0f}" if pd.notna(x) else x).astype(str)
这个方法不影响pandas读取后的号码匹配判断,也能兼容Excel的显示。
内容的提问来源于stack exchange,提问作者WallyWorld
相关产品推荐
相关产品推荐

