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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:33:15