使用Pandas读取CSV时保留数据原始格式(含前导零)的方法
碰到过好多次这种情况!带前导零的编码、邮编这类数据,一用Pandas加载CSV就自动转成数字丢了前导零,确实头疼。下面给你几个实用的解决思路:
1. 直接指定目标列的 dtype 为字符串
这是最简单直接的方法,在read_csv里通过dtype参数,把需要保留前导零的列明确指定为字符串类型:
import pandas as pd # 假设你的CSV里有个叫zip_code的列需要保留前导零 df = pd.read_csv('your_data.csv', dtype={'zip_code': str})
这样加载后,"074050"就会原封不动地以字符串形式存在数据框里,不会被转换成数字。要是有多列需要处理,直接扩展字典就行,比如dtype={'col1': str, 'col2': str}。
2. 用 converters 自定义转换逻辑
如果需要更灵活的控制(比如想自动补全固定长度的前导零),可以用converters参数给指定列加个自定义转换函数:
def preserve_leading_zero(value): # 转成字符串后,用zfill补全到6位(适合邮编这类固定长度的场景) return str(value).zfill(6) df = pd.read_csv('your_data.csv', converters={'zip_code': preserve_leading_zero})
要是不需要补零,只是单纯保留原始格式,函数里直接return str(value)就行。这个方法适合对格式有特殊要求的场景。
3. 先全量读成字符串,再按需转换其他列
如果你的CSV里大部分列都需要保留原始格式,只有少数列要转成数值类型,可以先把所有列都读成字符串,之后再单独处理需要转数字的列:
df = pd.read_csv('your_data.csv', dtype=str) # 比如把age列转成数值类型 df['age'] = pd.to_numeric(df['age'])
这种方式最稳妥,不用担心不小心漏掉某列的前导零。
小提醒
如果你的CSV里有空值,用dtype=str加载后空值会变成字符串"NaN",要是想保留原始的空字符串,可以加上na_filter=False参数,但要注意这个参数会关闭Pandas对空值的自动识别,慎用哦。
内容的提问来源于stack exchange,提问作者AbdeAMNR
相关产品推荐
相关产品推荐

