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

Pandas中如何利用列值作为切片索引提取字符串内容?

解决方案:通过DashPos列切片提取Temp列横杠后的数值

你遇到的问题是因为pandas的str[]切片不支持直接传入Series作为起始索引,必须使用标量值。要实现按每行的DashPos值对Temp列做切片,可采用以下两种方法:

方法1:使用apply逐行处理

import pandas as pd

df = pd.DataFrame({
'Name':['Tom','Phil','Eric'],
'Alias':['T','P','E'],
'ID':[1,2,3],
'Age':[32,30,45],
'Temp':['100-200','200-300','200-300'],
'SSDashPos':[4,4,4]
              })

df= df.astype({'Temp':'string'})
df['DashPos'] = df.Temp.str.find('-').add(1)

# 逐行根据DashPos值切片Temp列
df['SecondPos'] = df.apply(lambda row: row['Temp'][row['DashPos']:], axis=1)

执行后SecondPos列会得到['200', '300', '300'],完全符合需求。

方法2:使用numpy.vectorize优化性能

如果数据量较大,numpy.vectorize的性能会比apply更优:

import pandas as pd
import numpy as np

df = pd.DataFrame({
'Name':['Tom','Phil','Eric'],
'Alias':['T','P','E'],
'ID':[1,2,3],
'Age':[32,30,45],
'Temp':['100-200','200-300','200-300'],
'SSDashPos':[4,4,4]
              })

df= df.astype({'Temp':'string'})
df['DashPos'] = df.Temp.str.find('-').add(1)

# 封装切片逻辑并向量化执行
def slice_temp(temp_str, start_pos):
    return temp_str[start_pos:]

df['SecondPos'] = np.vectorize(slice_temp)(df['Temp'], df['DashPos'])

这两种方法都规避了切片索引必须为整数标量的限制,实现了按每行DashPos值提取目标字符串的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 14:12:40