如何在Pandas中通过部分字符串匹配新建DataFrame的Tenor列
解决DataFrame提取指定Tenor关键词的问题
嘿,我知道你为啥新列全返回FALSE了——你的代码里x in ['3Y','3M','1Y','1M']是在判断整个字符串x是否完全等于列表里的某个关键词,但你的数据都是带前缀/后缀的长字符串(比如ABC-3Y-ORDER),自然全匹配失败啦!
下面是实现你需求的最优方法,效率高且精准:
核心思路
用pandas的矢量化字符串方法str.extract结合正则表达式,直接从字符串中提取匹配的关键词,未匹配的自动填充NaN(如果需要FALSE可以后续替换)。这种方法比apply+lambda高效得多,尤其适合处理5万条的大数据量。
代码实现
import pandas as pd # 假设你的DataFrame是df,目标列名为COLUMN pattern = r'(3Y|3M|2Y|1Y)' # 正则捕获组,匹配你要的关键词 df['Tenor'] = df['COLUMN'].str.extract(pattern, expand=False) # 如果需要把未匹配的NaN替换成FALSE,加上这一行 # df['Tenor'] = df['Tenor'].fillna(False)
效果验证
用你的示例数据测试,结果如下:
| Index | COLUMN | Tenor |
|---|---|---|
| 0 | ABC-1M-Deliveryorder | NaN |
| 1 | KGF-ORDERDelivery-2Y | 2Y |
| 2 | DEFGHIABC1M-OPEN | NaN |
| 3 | KGFABC | NaN |
| 4 | ABC-3Y-ORDER | 3Y |
为什么这是最优解?
- 矢量化操作:pandas的字符串方法是底层优化过的,比循环/
apply快很多,处理5万条数据毫无压力 - 精准提取:正则表达式的捕获组能直接拿到你需要的关键词,不需要额外的判断逻辑
- 灵活可控:可以轻松调整正则模式(比如如果需要匹配
1M,只要把1M加入pattern即可),也能自由替换未匹配的值
内容的提问来源于stack exchange,提问作者Dax2ib
相关产品推荐
相关产品推荐

