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

如何从pandas现有列提取指定列表内的子串创建新列

问题原因

你原有代码运行失败的核心原因是lambda中写的生成器表达式会直接返回生成器对象,而非单个匹配值,无法直接赋值给DataFrame的列。

解决方案

方案1:修正apply写法(适合小数据量场景)

用next()方法取生成器的第一个匹配结果,无匹配时返回np.nan:

import pandas as pd
import numpy as np

state_us = ['Ohio', 'California']
fake_df = pd.DataFrame(np.array(['Route 66, Ohio, US', 'California US']), columns = ['Address'])

fake_df['State'] = fake_df['Address'].apply(
    lambda x: next((element for element in state_us if element in x), np.nan)
)

方案2:向量化正则提取(适合大数据量场景,性能更优)

用pandas原生的str.extract方法实现,无需逐行遍历:

# 将州名列表拼接为正则「或匹配」模式
pattern = '|'.join(state_us)
# 提取第一个匹配到的子串,无匹配返回NaN
fake_df['State'] = fake_df['Address'].str.extract(f'({pattern})', expand=False)

运行两种方案后得到的fake_df都和你需要的results_df完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 04:54:02