获取 Pandas DataFrame 列中字符串列表中的所有行 - 此模式具有匹配组
Posted
技术标签:
【中文标题】获取 Pandas DataFrame 列中字符串列表中的所有行 - 此模式具有匹配组【英文标题】:Get all rows in a Pandas DataFrame column that are in a list of strings - This pattern has match groups 【发布时间】:2021-09-23 11:38:09 【问题描述】:考虑代码
将熊猫导入为 pd
# dfs
df_sample = pd.read_csv('...........')
array = ['' , '' , '' ....]
pattern = '|'.join(array)
# get all the rows
print(df_sample.COLUMN_NAME_XXX.str.contains(pattern))
如何获取列的内容,而不是目前的 TRUE/FALSE?
自从我不断收到这个:
manipulations.py:17: UserWarning: This pattern has match groups. To actually get the groups, use str.extract.
print(df_sample.COLUMN_NAME_XXX.str.contains(pattern))
0 False
1 True
2 False
3 NaN
4 NaN
...
10942 False
10943 NaN
10944 NaN
10945 NaN
10946 NaN
Name: COLUMN_NAME_XXX, Length: 568743243, dtype: object
【问题讨论】:
UserWarning 说要使用str.extract
,你试过了吗?如果您实际上根据您的模式数组共享几个输入行和预期输出,那会更容易
试试这个:df_sample[df_sample.COLUMN_NAME_XXX.str.contains(pattern)]
。它会给你那些包含你指定的模式的过滤行。
@MEdwin:它给了ValueError: Cannot mask with non-boolean array containing NA / NaN values
【参考方案1】:
通过fillna()
尝试:
m=df_sample.COLUMN_NAME_XXX.str.contains(pattern).fillna(False)
#Finally:
out=df[m]
#OR
out=df.loc[m]
现在,如果您打印 out
,您将获得过滤后的数据框
【讨论】:
如何强制contains
只返回模式中的整个单词的结果?
@JAN 然后使用isin()
而不是str.contains()
m=df_sample.COLUMN_NAME_XXX.isin(array)
好的,谢谢!最后一件事,我需要另辟蹊径,这意味着检查array
的元素之一是否在列中,而不是数组中的列是否...注意启发一点?跨度>
@JAN 你可以这样做:df_sample.COLUMN_NAME_XXX.map(lambda x:True if x in array else False)
【参考方案2】:
您应该能够将该逻辑数组直接传递回数据帧切片运算符,例如:
df_sample[df_sample.COLUMN_NAME_XXX.str.contains(pattern)]
应该返回满足方括号内条件的所有行。条件可以通过如下格式链接起来:
[(condition1) | (condition2)] #OR
[(condition1) & (condition2)] #AND
它似乎自动将 NaN 映射到 False,但如果不是,您可以通过添加 .fillna(value = False) 将其作为另一个步骤添加到布尔数据框:
df_sample[df_sample.COLUMN_NAME_XXX.str.contains(pattern).fillna(value = False)]
【讨论】:
拍摄ValueError: Cannot mask with non-boolean array containing NA / NaN values
好的,所以您需要将 NaN 值替换为 False。尝试将 .fillna(value = False) 添加到条件中以使其: df_sample[df_sample.COLUMN_NAME_XXX.str.contains(pattern).fillna(value = False) ]以上是关于获取 Pandas DataFrame 列中字符串列表中的所有行 - 此模式具有匹配组的主要内容,如果未能解决你的问题,请参考以下文章
pandas使用query函数基于dataframe字符串数据列中字符串的长度筛选dataframe的数据行(specific column string length)
删除 pandas DataFrame 列中字符串条目的结尾
检查 Pandas DataFrame 列中的字符串是不是在字符串列表中
pandas移除dataframe字符串数据列中的后N个字符(remove the last n characters from values from column of dataframe)