Skip to main content
 首页 » 编程设计

python pandas 部分字符串匹配

2025年05月04日17www_RR

我创建了一个数据框 df,其中有一列具有以下值:

category 
20150115_Holiday_HK_Misc 
20150115_Holiday_SG_Misc 
20140116_DE_ProductFocus 
20140116_UK_ProductFocus 

我想创建 3 个新列

category                  |           A              |  B  |       C      
20150115_Holiday_HK_Misc     20150115_Holiday_Misc     HK    Holiday_Misc  
20150115_Holiday_SG_Misc     20150115_Holiday_Misc     SG    Holiday_Misc 
20140116_DE_ProductFocus     20140116_ProductFocus     DE    ProductFocus 
20140116_UK_ProductFocus     20140116_ProductFocus     UK    ProductFocus 

在 A 列中,我想删除“_HK”——我想我需要手动对其进行编码,但这没关系,我有所有国家/地区代码的列表

在 B 列中,正是国家代码

C列,是A列,开头没有日期

我正在尝试这样的事情,但还没有走得太远。

 df['B'] = np.where([df['category'].str.contains("HK")==True], 'HK', 'Not Specified') 

谢谢

请您参考如下方法:

你可以使用Series.str.extract()方法:

# remove two characters (Country Code) surrounded by '_' 
df['A'] = df.category.str.replace(r'_\w{2}_', '_') 
# extract two characters (Country Code) surrounded by '_'  
df['B'] = df.category.str.extract(r'_(\w{2})_', expand=False) 
df['C'] = df.A.str.extract(r'\d+_(.*)', expand=False) 

结果:

In [148]: df 
Out[148]: 
                   category                      A   B             C 
0  20150115_Holiday_HK_Misc  20150115_Holiday_Misc  HK  Holiday_Misc 
1  20150115_Holiday_SG_Misc  20150115_Holiday_Misc  SG  Holiday_Misc 
2  20140116_DE_ProductFocus  20140116_ProductFocus  DE  ProductFocus 
3  20140116_UK_ProductFocus  20140116_ProductFocus  UK  ProductFocus