将通配符应用于 Pandas isin 过滤器

24h*_*ast 5 python string series dataframe pandas

总菜鸟在这里,对不起初学者的问题。我一直在 Pandas 中绞尽脑汁,试图过滤 Dataframe 中的一个系列,以定位包含字符串列表中的一个的行。

import pandas as pd
streets = ['CONGRESS', 'GUADALUPE', 'BEN WHITE', 'LAMAR', 'MANCHACA', 'BURNET', 'ANDERSON', 'BRAKER' ]
# the actual list of street names is much longer than this

strs = pd.read_csv('short_term_rental_locations.csv')

# the following returns no values, or all 'False' values to be more accurate
strs[strs['PROP_ADDRESS'].isin(streets)]

# but if I use .contains, i can find rows that contain part of the 
# street names, but .contains has a limit of six positional arguments.
strs[strs['PROP_ADDRESS'].str.contains('CONGRESS')]
Run Code Online (Sandbox Code Playgroud)

我试过在 .isin 中使用通配符 * 无济于事。为这个而挣扎,我感到很愚蠢。非常感谢任何帮助。谢谢!

jpp*_*jpp 7

.contains 限制为六个位置参数。

这里有一些误解。目前还不清楚“六个位置参数”指的是什么。严格来说,pd.Series.str.contains最多有 5 个参数。但实际上只有一个包含您正在搜索的字符串。

在这种情况下,您可以使用正则表达式(默认情况下处于启用状态)来构建要与 一起使用的单个字符串pd.Series.str.contains

streets = ['CONGRESS', 'GUADALUPE', 'BEN WHITE', 'LAMAR',
           'MANCHACA', 'BURNET', 'ANDERSON', 'BRAKER' ]

searchstr = '|'.join(streets)
strs[strs['PROP_ADDRESS'].str.contains(searchstr)]
Run Code Online (Sandbox Code Playgroud)