
照片:Pascal MeieronUnsplash
大多数Pandas用户都熟悉DataFrame中正则表达式的.extract(), .replace()和.findall()。这些函数主要帮助数据提取和清理,特别是字符串数据类型。然而,其他Pandas方法也有助于正则表达。本教程的目的是在处理DataFrame单元中的字符串值列表时,对这些函数的使用做一些说明。重点将放在以下函数上。
- 包含( )
- Set.Intersection( )
- Set.Difference( )
包含( )
我们从pandas.Series.str.contains开始 该函数测试一个模式或正则表达式(regex)是否包含在一个系列或索引的字符串中。它根据给定的模式或正则表达式是否包含在系列或索引的字符串中,输出一个布尔值系列或索引。这个链接给出了语法中参数的更多细节。
语法
Series.str.contains(pat, case=True, flags=0, na=None, regex=True)
该链接给出了该语法中参数的更多细节。
例子1:在表达式或字符串列表中寻找一个字符串。
pandas.Series.str.contains的文档参考给出了如何对Series和Index使用该函数的例子,以及如何处理NaN。在本教程中,我们想看看该函数是如何在DataFrame中的一个列表中工作的。
我们首先创建一个数据集df,它是一个5个人的购物清单。该数据集有两列Ordered和Delivered。每一行代表这个人订购的东西和交付的东西。
import pandas as pd

在例1中,我们想找出订单中是否有鸡蛋或油。
df['Ordered'].str.contains('Egg|Oil')

当鸡蛋或油出现在字符串中时,该函数返回True。
Set.Intersection ( ) 方法
Set()和Intersection()是返回一个包含两个或多个集合之间相似性的集合的方法。返回的集合只包含存在于两个集合中的项目。
语法
Set(x).Intersection(Set(y))
在我们的下一个例子中,我们想比较两列的字符串值,并找到相似的值。
例2:比较两列
要想知道哪些订购的物品被送达,要做到这一点,我们必须把单元格分成一个列表,并使用set( )和intersection方法来检查。我们通过创建另一列检查来做到这一点
check = df.apply(lambda x: (set(x['Ordered'].split(', '))

例3:比较两列的精确值
要找出哪些交付的物品,与订单完全匹配。Set( )方法可以帮助做到这一点,如下图所示。
check2 = df.apply(lambda x: (set(x['Ordered'].split(', ')) ==

Set.Difference ( ) 方法
Difference() 返回一个集合,其中包含只存在于集合x中的项目,而不存在于集合y中。
语法
Set(x).difference(Set(y))
在我们的下一个例子中,我们要比较两列的字符串值,并找到相似的值。
例4:比较两列不同的值
要找出哪些已订购的物品没有交付,以及已交付的物品没有被订购。如下图所示。
check3 = df.apply(lambda x: (set(x['Ordered'].split(', '))

要检查哪些已交付的项目没有被订购,我们只需在代码中切换已订购和已交付的位置。
check4 = df.apply(lambda x: (set(x['Delivered'].split(', '))

总结
在本教程中,我们学习了Python pandas的contains()、Set.Intersection()和difference()方法,在DataFrame Cell中访问一个字符串列表。
潘达斯。处理DataFrame中的字符串列表最初发表在Dev Genius的Medium上,在那里人们通过强调和回应这个故事继续进行对话。