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

如何在Pandas DataFrame中用另一列值截取字符串长度?

哈哈,这个坑我刚学Pandas的时候也踩过!你遇到的TypeError,本质是因为Pandas的Series切片逻辑和普通Python字符串切片完全不一样——你想用df['String'][:df['String Limit']]逐行截断,但Pandas会把整个String Limit列当成索引范围参数来解析,而不是逐行取对应的值去截断字符串,自然就报错了。

给你两个实用的解决方法:

方法一:用apply逐行处理(直观易读)

这是最容易理解的方式,用apply按行遍历数据框,每一行里拿对应的限制长度去截断字符串:

import pandas as pd
data = [[5, 'LONSTRING'], [3, 'LONGERSTRING'], [7, 'LONGESTSTRINGEVER']]
df = pd.DataFrame(data, columns=['String Limit', 'String'])

# 按行处理,axis=1表示横向遍历每一行
df['Short String'] = df.apply(lambda row: row['String'][:row['String Limit']], axis=1)
print(df)

方法二:列表推导式+zip(性能更优)

如果你的数据集比较大,列表推导式的速度会比apply快不少——它是纯Python层面的循环,开销更小:

# 把两列的元素一一配对,逐个截断
df['Short String'] = [s[:limit] for s, limit in zip(df['String'], df['String Limit'])]

最终效果

两种方法都能得到你预期的结果:

String Limit               String Short String
0             5             LONSTRING        LONST
1             3          LONGERSTRING          LON
2             7  LONGESTSTRINGEVER        LONGEST

再啰嗦一句为啥原来的写法不行:df['String'][:X]里的X必须是单个整数(用来指定索引位置的截止点),但你传入的是一整列数据(Series),Pandas没法把一个Series当成索引范围来用,所以直接抛出了TypeError。

内容的提问来源于stack exchange,提问作者Nichlas H.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:43:19