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
相关产品推荐
相关产品推荐

