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

如何在Pandas DataFrame中按值长度为身高列补零格式化?

解决DataFrame身高列格式转换及个位数英寸补零问题

问题分析

你需要将5'8"这类格式转换为X Feet XX Inches,已完成基础替换,但个位数英寸未补零,之前的字符串索引操作因Series切片逻辑错误、空值(float类型)导致失败。

最优解决方案:从源数据拆分格式化(推荐)

直接从原始的X'Y"格式提取英尺和英寸数值,通过字符串格式化自动补零,比基于替换后字符串修改更可靠:

# 提取英尺和英寸的数字部分
df[['feet', 'inches']] = df['Height'].str.extract(r'(\d+)\'(\d+)\"')
# 格式化输出,英寸不足两位自动补零
df['Height'] = df.apply(lambda x: f"{x['feet']} Feet {x['inches'].zfill(2)} Inches", axis=1)

基于现有替换结果的修复方案

如果要在你已完成替换的字符串基础上修改,可通过正则匹配单个数字的英寸部分直接替换,无需判断字符串长度:

# 针对"X Feet Y Inches"格式,把单个数字的英寸替换为0Y
df['Height'] = df['Height'].str.replace(r'(\d+) Feet (\d) Inches', r'\1 Feet 0\2 Inches')

原代码错误原因及修复

  1. 第一个代码无变化的原因
    你使用df.Height[:8]是对整个Series取前8行数据,而非每个字符串的前8个字符,需改用.str方法实现逐元素切片:

    df['Height'] = np.where(
        df.Height.str.len() == 15,
        df.Height.str[:8] + '0' + df.Height.str[8:],
        df.Height
    )
    
  2. 第二个代码TypeError的原因
    列中存在NaN(float类型),当apply访问x['Height']时,float对象无法切片。需先将列转为字符串类型,或在lambda中处理空值:

    # 先转字符串避免float报错
    df['Height'] = df['Height'].astype(str)
    df['Height'] = np.where(
        df['Height'].str.len() == 15,
        df.apply(lambda x: x['Height'][:8]+'0'+x['Height'][8:], axis=1),
        df['Height']
    )
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 23:12:28