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

Pandas多行场景下用列值作为另一列字符串切片的实现方法

问题原因

pandas的.str字符串访问器的切片语法仅支持传入固定标量作为统一切片参数,无法直接传入同长度的序列实现逐行动态切片。

  • 单行场景下.item()可以从长度为1的Series中提取出单个Python标量作为固定切片值,因此可以正常运行
  • 多行场景下.item()无法从长度大于1的序列中提取单个标量,因此抛出can only convert an array of size 1 to a Python scalar报错
  • 直接传入.values、.items()返回的对象时,pandas无法将其识别为逐行对应的切片参数,会返回全NaN结果
可行方案

方案1:列表推导式(性能最优,推荐)

直接逐行配对Name列的字符串和Number列的切片值,做原生Python切片,运行效率最高,适合任意数据量场景:

import pandas as pd

# 构造测试数据
data = pd.DataFrame(
    data = {
        'Name':['This is a title', 'This is another title'], 
        'Number':[-5, -13]
    }
)

# 逐行动态切片生成新列
data['Test'] = [s[:n] for s, n in zip(data['Name'], data['Number'])]

运行结果:

Name  Number         Test
0        This is a title      -5   This is a 
1  This is another title     -13  This is a

方案2:apply逐行处理

按行轴遍历DataFrame,每行取对应字段做切片,代码写法更直观,但性能弱于列表推导式,不适合超大数据量场景:

data['Test'] = data.apply(lambda row: row['Name'][:row['Number']], axis=1)

注意:pandas当前版本的字符串访问器不支持给.str[:]传入Series/数组类型参数实现逐行动态传参切片,不要直接传列对象调用该接口。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 11:15:29