Pandas extractall无匹配时如何保留对应行的None值?
保留DataFrame所有索引的正则提取结果
原数据与问题
首先定义目标DataFrame:
import pandas as pd df = pd.DataFrame({ 'column_1': ['ABC DEF', 'JKL', 'GHI ABC', 'ABC ABC', 'DEF GHI', 'DEF', 'DEF DEF', 'ABC GHI DEF ABC'], 'column_2': [9, 2, 3, 4, 6, 2, 7, 1 ]})
对应的原始数据:
column_1 column_2 0 ABC DEF 9 1 JKL 2 2 GHI ABC 3 3 ABC ABC 4 4 DEF GHI 6 5 DEF 2 6 DEF DEF 7 7 ABC GHI DEF ABC 1
使用代码df['column_1'].str.extractall('(ABC)|(DEF)').groupby(level=0).first()提取时,会丢失无匹配项的索引1,无法得到包含所有原索引的结果。需要保留索引1并将对应值填充为None,期望输出如下:
0 1 0 ABC DEF 1 None None 2 ABC None 3 ABC None 4 None DEF 5 None DEF 6 None DEF 7 ABC DEF
解决方案
方法:通过reindex补全缺失索引
先执行原提取逻辑得到匹配结果,再通过reindex将结果对齐到原DataFrame的索引,最后用fillna填充缺失值为None:
# 执行原提取操作 temp_result = df['column_1'].str.extractall('(ABC)|(DEF)').groupby(level=0).first() # 补全索引并填充缺失值 final_result = temp_result.reindex(df.index).fillna(value=None)
执行上述代码后,即可得到包含所有原索引的目标结果。
内容的提问来源于stack exchange,提问作者Himanshu Poddar
相关产品推荐
相关产品推荐

