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

Python中如何根据条件交换DataFrame两列的值?

问题分析与解决

错误原因

使用apply(axis=1)遍历行时,传入自定义函数的是单条行记录(Series类型),而非整个DataFrame。函数里的df['unit_backup']实际是单个字符串值,不是Series对象,而.str是Series专属的字符串操作访问器,因此触发'str' object has no attribute 'str'错误。

解决方案

方案1:修改函数适配单条行记录

调整函数逻辑,直接处理每行的Series数据,无需创建备份列:

def range_unit_correction_fn(row):
    if "-" in row['Unit']:
        # 直接交换两列值
        row['Range'], row['Unit'] = row['Unit'], row['Range']
    return row

# 应用函数
sample_df = sample_df.apply(range_unit_correction_fn, axis=1)

执行后得到目标结果:

Range Unit
0   34-67   ml
1  35-50   12
2  10-100  gm
3   45-90   mg

方案2:向量化批量处理(推荐)

避免低效的行迭代,用布尔索引批量操作,适合大数据量场景:

# 生成需要交换的行的掩码
mask = sample_df['Unit'].str.contains("-", na=False)

# 批量交换满足条件的行的Range和Unit列
sample_df.loc[mask, ['Range', 'Unit']] = sample_df.loc[mask, ['Unit', 'Range']].values

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 05:09:52