如何在Pandas中基于另一列字符串提取目标内容?
提取DataFrame中姓名列的正确实现方法
原始DataFrame
| Column A | Column B |
|---|---|
| JELLY ROSEN 15 JELLY STREET APT 111 JERSEY CITY, NJ | 15 JELLY STREET APT 111 JERSEY CITY, NJ |
| ROB ROSEN & STEVEN ROSEN 29 MAIN ST JERSEY CITY, NJ | 29 MAIN ST JERSEY CITY, NJ |
需求说明
需要生成Column C,提取Column A中去掉Column B对应字符串后的姓名部分,结果如下:
| Column C |
|---|
| JELLY ROSEN |
| ROB ROSEN & STEVEN ROSEN |
原代码问题
你写的代码仅固定处理第一行数据([0]索引),无法批量应用到所有行,且函数参数与DataFrame调用逻辑不匹配,无法生成整列有效结果。
正确实现方法
方法1:用apply逐行处理
通过apply遍历每行,针对每行的Column A和Column B做字符串截取:
import pandas as pd # 构造示例DataFrame df = pd.DataFrame({ 'Column A': [ 'JELLY ROSEN 15 JELLY STREET APT 111 JERSEY CITY, NJ', 'ROB ROSEN & STEVEN ROSEN 29 MAIN ST JERSEY CITY, NJ' ], 'Column B': [ '15 JELLY STREET APT 111 JERSEY CITY, NJ', '29 MAIN ST JERSEY CITY, NJ' ] }) def extract_name(row): # 找到Column B在Column A中的起始位置,截取前半部分并清理首尾空格 return row['Column A'][:row['Column A'].find(row['Column B'])].strip() df['Column C'] = df.apply(extract_name, axis=1)
方法2:用str.replace直接替换
由于Column B是Column A的后缀内容,直接替换为空后清理空格,写法更简洁:
df['Column C'] = df.apply(lambda row: row['Column A'].replace(row['Column B'], '').strip(), axis=1)
方法3:向量化处理(大数据量推荐)
避免逐行循环,用向量化方式高效处理,适合Column B严格为Column A后缀的场景:
df['Column C'] = df['Column A'].str[:-df['Column B'].str.len()].str.strip()
运行上述任意代码后,df['Column C']即可得到目标姓名列。
内容的提问来源于stack exchange,提问作者jelly
相关产品推荐
相关产品推荐

