DataFrame数据处理求助:提取指定字符段及代码调试
解决DataFrame中提取指定字符串片段的问题
我帮你定位了原代码的问题,也给出了修正后的完整方案:
原代码的核心问题
你在pic_mod函数里处理的是单个行的PIC_1值,它是普通字符串对象,不是pandas的Series,所以不能调用.str方法做切片——这是代码无法运行的主要原因。另外原代码的切片长度不符合需求,也没考虑找不到"42"的边界情况。
修正后的完整代码
import pandas as pd # 示例数据 data = { 'PIC_1': ['**PARTIAL-DECODE***P / 42011721930018984390078...'], 'Wgt': ['112'], 'p.lgth': [53], 'p_lgth': [53] } df = pd.DataFrame(data) def pic_mod(row): # 当p_lgth不等于30时执行提取逻辑 if row['p_lgth'] != 30: pic_loc = row['PIC_1'].find('42') # 先检查是否找到"42",避免索引越界报错 if pic_loc != -1: # 提取"42"及其之后的15位字符(共17位:2位"42"+15位后续) return row['PIC_1'][pic_loc : pic_loc + 17] else: # 如果找不到"42",可返回原字符串或空值,这里返回原字符串 return row['PIC_1'] else: # 当p_lgth等于30时,返回原PIC_1或你需要的其他值 return row['PIC_1'] # 应用函数生成新列 df['PIC_2'] = df.apply(pic_mod, axis=1) print(df['PIC_2'].values[0])
代码说明
- 移除
.str调用:直接对单个字符串做切片,这是Python字符串的原生操作,不需要依赖pandas的Series方法 - 增加边界判断:用
pic_loc != -1确保找到"42"后再切片,避免找不到时出现索引错误 - 修正切片范围:
pic_loc : pic_loc + 17刚好覆盖"42"(2位)加上之后的15位字符,和你给出的示例输出完全匹配 - 补充分支逻辑:明确处理
p_lgth == 30的情况,你可以根据实际需求修改返回值
运行结果
执行代码后,输出正好是你预期的:
42011721930018984
内容的提问来源于stack exchange,提问作者M Sanders
相关产品推荐
相关产品推荐

