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

时间:2018-10-13 14:34:54

标签: python string pandas dataframe series

这里是菜鸟总数,对初学者的问题感到抱歉。 我一直在研究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')]

我尝试将通配符*与.isin一起使用无济于事。我为此感到很愚蠢。任何帮助,不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

  

.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)]