Pandas.isin()用于列的每一行中的值列表

2024-04-29 09:12:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个小问题:我的DataFrame中有一个列,它有多行,在每一行中,它包含1个或多个以“M”字母开头的值,后跟3个数字。如果有多个值,则用逗号分隔。 我想打印出DataFrame的一个视图,只显示其中1列包含我指定的值的行(例如,我希望它们保存list['M111','M222']中的任何项。 我已经开始用以下方式构建布尔掩码:

df[df['Column'].apply(lambda x: x.split(', ').isin(['M111', 'M222']))]

在我看来,.apply()和其中的.split()方法首先将“Column”值转换为每行中包含1个或多个值的列表,然后.isin()方法确定每行中的项目列表中是否有任何项在指定值列表中['M111','M222']。 但是在实践中,我没有得到所需的DataFrame视图,而是得到了错误

^{pr2}$

我做错什么了?在

谨致问候, 格林


Tags: 方法视图dataframedf列表字母column数字
2条回答

只能使用Pandas对象访问isin()方法。{But}返回列表。将split()包装在Series中可以:

# sample data
data = {'Column':['M111, M000','M333, M444']}
df = pd.DataFrame(data)

print(df)
       Column
0  M111, M000
1  M333, M444

现在将split()包装成Series
请注意,isin()将返回一个布尔值列表,对于来自split()的每个元素一个布尔值。您想知道“list…中的项是否在指定值列表中”,所以请将any()添加到apply函数中。在

^{pr2}$

输出:

       Column
0  M111, M000

正如其他人所指出的,有更简单的方法来实现你的最终目标。但这就是如何解决您遇到的isin()的具体问题。在

我认为你需要:

df2 = df[df['Column'].str.contains('|'.join(['M111', 'M222']))]

相关问题 更多 >