Skip to main content
 首页 » 编程设计

python之如何在 Pandas 列中获取唯一的子串

2025年05月04日20kenshinobiy

我有一个数据框如下:

df = pd.DataFrame({'a':[1,2,3,4],  
                   'b':["west, east", "east, north","south, west","east, south"]}) 
 
   a            b                                                                                                                      
0  1   west, east                                                                                                                      
1  2  east, north                                                                                                                      
2  3  south, west                                                                                                                      
3  4  east, south             

我想从 b 列中获取唯一的字符串,如下所示。

预期输出:

["east", "west", "north", "south"]   # order doesn't matter here 

我的努力

op = [] 
for _, value in df['b'].items(): 
    op.extend(value) 
 
op = set(op) 

哪个给出了正确的结果,但有更有效的方法吗?

我的原始数据集有大约百万行和数千个不同的值。

请您参考如下方法:

您可以通过join创建长字符串,然后split并转换为set,最后到list:

a = list(set(', '.join(df['b']).split(', '))) 
print (a) 
['south', 'north', 'west', 'east'] 

或者将set comprehension与split和flattening一起使用:

a = list(set([y for x in df['b'] for y in x.split(', ')])) 
print (a) 
['south', 'north', 'west', 'east'] 

纯 pandas 解决方案是使用 Series.str.split , DataFrame.stack , Series.unique并转换为 list:

a = df.b.str.split(', ', expand=True).stack().unique().tolist()