如何根据另一列切片DataFrame列?遇AttributeError报错求助
解决Pandas中按指定长度切片字符串列的问题
先来看你的问题场景:你有这样一个DataFrame:
import pandas as pd data = { "Main": ["Sri playnig well cricket", "sri went out", "Ram is in", "Ram went to UK,US"], "Length": [5, 2, 1, 2] } df = pd.DataFrame(data)
你希望根据Length列的数值,对Main列的字符串进行对应长度的切片,得到这样的结果:
| Main | Length |
|---|---|
| Sri p | 5 |
| sr | 2 |
| R | 1 |
| Ra | 2 |
你的代码为什么报错?
你写的apply函数有两个核心问题:
- 字符串没有
slice()方法:Python里对字符串切片要用[起始索引:结束索引]的语法,而不是调用slice()方法,这就是你遇到AttributeError: 'str' object has no attribute 'slice'的直接原因。 - 多余的循环逻辑:你在函数里循环了整个
df["Length"],但实际上每一行只需要用到当前行的Length值,循环所有行的Length完全没必要,还会导致逻辑混乱。
正确的解法
我们只需要针对每一行取对应的Length值,对Main字符串做切片即可,这里提供两种写法:
方法1:自定义函数
def slicer(row): # 取当前行的Length值,对Main字符串进行前N个字符的切片 return row['Main'][:row['Length']] # 将处理后的结果替换原来的Main列 df['Main'] = df.apply(slicer, axis=1)
方法2:更简洁的lambda表达式
如果不想写单独的函数,用lambda可以一行搞定:
df['Main'] = df.apply(lambda row: row['Main'][:row['Length']], axis=1)
运行上面的代码后,你就能得到期望的结果了。
内容的提问来源于stack exchange,提问作者Pyd
相关产品推荐
相关产品推荐

