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

如何用Pandas仅为混合数据列中的整数补前导零?

问题描述

我有一个包含混合数据类型列的CSV文件,用Python Pandas处理时,原本用以下代码给列补前导零:

df = pd.read_csv('test.csv')
df['column_A'] = df['column_A'].str.zfill(10)

但需求是仅为纯整数且长度不足10位的单元格补零,目前代码会错误处理含-的单元格(比如示例第5行)。示例数据及预期/实际结果如下:

Raw DataIdeal OutcomeActual Outcome
ABC-1234ABC-1234ABC-1234
000-1234-000000-1234-000000-1234-000
123400000012340000001234
123456789012312345678901231234567890123
00-1800-1800000000-18

解决方案

核心思路是先筛选出纯整数类型的单元格,再对其中长度不足10位的补前导零,其余单元格保持原样。可以用正则匹配结合条件赋值实现:

方法1:使用np.where

import pandas as pd
import numpy as np

df = pd.read_csv('test.csv')
# 匹配纯整数的正则:^开头、\d+匹配1个以上数字、$结尾
is_integer = df['column_A'].str.match(r'^\d+$')
# 对符合条件且长度<10的单元格补零,否则保留原内容
df['column_A'] = np.where(
    is_integer & (df['column_A'].str.len() < 10),
    df['column_A'].str.zfill(10),
    df['column_A']
)

方法2:使用df.loc直接赋值

import pandas as pd

df = pd.read_csv('test.csv')
# 定位纯整数且长度不足10的行
mask = df['column_A'].str.match(r'^\d+$') & (df['column_A'].str.len() < 10)
# 仅对这些行补零
df.loc[mask, 'column_A'] = df.loc[mask, 'column_A'].str.zfill(10)

验证结果

处理后的数据会完全符合预期:

  • 纯整数且长度<10的单元格(如1234)被补为0000001234
  • 含非数字字符的单元格(如ABC-1234、00-18)保持不变
  • 长度≥10的纯整数(如1234567890123)也保持原样

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 09:30:39