求助:基于字符串长度提取pandas中group1列前14/15字符的代码报错问题
解决Pandas中根据字符串长度提取子串的问题
错误原因分析
你的代码执行报错主要有两个问题:
df.apply(clean_substr)默认按列处理数据(axis=0),但你需要逐行处理group1字段,必须指定axis=1;- 函数内部误用了针对整列的
str.len()、str.slice()方法——当按行传递参数时,传入函数的是单行的Series对象,单个字符串元素不需要通过str属性调用方法。
修正方案
方案1:修正apply函数逻辑
调整函数以处理单行数据,同时指定axis=1实现逐行操作:
import pandas as pd data = {'Name': ['Tom', 'Nick','Jack', 'Ann', 'Jane'], 'group1': ['SRE_high_0101240243', 'ERS_med_140124065', 'SRE_low_110124084' , 'SRE_high_05022484', 'CER_med_11022437023']} df = pd.DataFrame(data) def clean_substr(row): s = row['group1'] return s[:15] if len(s) == 19 else s[:14] df['group1_clean'] = df.apply(clean_substr, axis=1) display(df)
方案2:向量化操作(推荐,性能更优)
Pandas优先推荐向量化操作替代apply,尤其适合大数据集,这里通过numpy.where结合字符串方法实现:
import pandas as pd import numpy as np data = {'Name': ['Tom', 'Nick','Jack', 'Ann', 'Jane'], 'group1': ['SRE_high_0101240243', 'ERS_med_140124065', 'SRE_low_110124084' , 'SRE_high_05022484', 'CER_med_11022437023']} df = pd.DataFrame(data) # 生成长度判断条件 len_condition = df['group1'].str.len() == 19 # 根据条件选择对应子串 df['group1_clean'] = np.where( len_condition, df['group1'].str[:15], df['group1'].str[:14] ) display(df)
内容的提问来源于stack exchange,提问作者SAJ
相关产品推荐
相关产品推荐

