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

Python Pandas:根据末尾数字移除字符串尾部字符及报错求助

问题解决与代码优化

1. 修复TypeError错误

你遇到的TypeError: 'method' object is not iterable是因为df.iterrows是DataFrame的方法,必须加括号调用(即df.iterrows())才能返回可迭代的行对象。之前的代码漏掉了括号,导致遍历的是方法本身而非行数据。

2. 实现正确的字符移除逻辑

原代码没有判断条件,直接执行两次替换会导致逻辑混乱(比如末尾是20的字符串会先被移除最后一位变成"2",再被判断是否符合0-5又移除一位)。正确逻辑需要先判断末尾是否为"20"(优先处理两位的情况),再判断是否为0-5的单个数字。

修复后的遍历行版本

def vvv(df):
    for index, row in df.iterrows():  # 修复:添加括号调用iterrows()
        ft_str = row['FT']
        # 优先判断末尾是否为"20",移除最后两位
        if ft_str.endswith('20'):
            df.loc[index, 'FT'] = ft_str[:-2]
        # 判断末尾是否为0-5的数字,移除最后一位
        elif len(ft_str) > 0 and ft_str[-1].isdigit() and int(ft_str[-1]) <= 5:
            df.loc[index, 'FT'] = ft_str[:-1]
    return df

注意:直接修改row['FT']不会改变原DataFrame(因为iterrows返回的是行副本),所以要用df.loc[index, 'FT']来定位修改。

更高效的向量化实现(推荐)

遍历行效率较低,尤其当DataFrame数据量大时,推荐使用apply函数实现向量化处理:

def process_ft(s):
    # 处理空字符串的边界情况
    if not s:
        return s
    # 先判断末尾是否为"20"
    if s.endswith('20'):
        return s[:-2]
    # 判断末尾是否为0-5的数字
    elif s[-1].isdigit() and int(s[-1]) <= 5:
        return s[:-1]
    # 不符合条件则返回原字符串
    return s

# 直接对FT列应用处理函数
df['FT'] = df['FT'].apply(process_ft)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 04:35:04