首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫数据-使用WildCards选择行

熊猫数据-使用WildCards选择行
EN

Stack Overflow用户
提问于 2017-02-12 11:56:08
回答 2查看 7.7K关注 0票数 2

我是蟒蛇的新手。我的问题有点含糊不清。如果单元格中的任何字符串与特定通配符规则匹配,我希望从dataFrame中选择行。让我们假设这个例子:

表到屏幕:

代码语言:javascript
复制
df=pd.DataFrame({'Column':[
    'select rows in pandas DataFrame using comparisons against two columns',
    'select rows from a DataFrame based on values in a column in pandas',
    'use a list of values to select rows from a pandas dataframe',
    'selecting columns from a pandas dataframe based on row conditions',
    'select particular columns from inside groups in pandas dataframe']})

  Column
0 select rows in pandas DataFrame using comparisons against two columns
1 select rows from a DataFrame based on values in a column in pandas
2 use a list of values to select rows from a pandas dataframe
3 selecting columns from a pandas dataframe based on row conditions
4 select particular columns from inside groups in pandas dataframe

规则:

代码语言:javascript
复制
Rules=pd.DataFrame({'SearchTerms':['*select*DataFrame*row*','*select*dataframe*row*']})

  SearchTerms
0 *select*DataFrame*row*
1 *select*dataframe*row*

结果:

代码语言:javascript
复制
  Column
0 select rows in pandas DataFrame using comparisons against two columns
1 select rows from a DataFrame based on values in a column in pandas
2 use a list of values to select rows from a pandas dataframe

我尝试使用fnmatch来处理这样的多个语句:

代码语言:javascript
复制
import fnmatch
selection=[]
for row in df['Column']:
   selection.append(fnmatch.fnmatch(row,Rules[0])|fnmatch.fnmatch(row,Rules[1]))

问题

如何从带有可变通配符语句的dataFrame中选择行?

人生何去何从。来人救救我!)

提前谢谢你,

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-12 12:38:50

“通配符”的解决方案:

数据:

代码语言:javascript
复制
In [53]: df
Out[53]:
                                                                  Column
0  select rows in pandas DataFrame using comparisons against two columns
1     select rows from a DataFrame based on values in a column in pandas
2            use a list of values to select rows from a pandas dataframe
3      selecting columns from a pandas dataframe based on row conditions
4       select particular columns from inside groups in pandas dataframe

In [54]: Rules
Out[54]:
              SearchTerms
0  *select*DataFrame*row*
1  *select*dataframe*row*

解决方案:

代码语言:javascript
复制
In [55]: pat = Rules.SearchTerms.str.replace('\*', r'.*').str.cat(sep='|')

In [56]: df[df.Column.str.contains(pat, flags=re.I)]
Out[56]:
                                                              Column
3  selecting columns from a pandas dataframe based on row conditions

生成的RegEx模式:

代码语言:javascript
复制
In [64]: pat
Out[64]: '.*select.*DataFrame.*row.*|.*select.*dataframe.*row.*'
票数 2
EN

Stack Overflow用户

发布于 2017-02-12 12:43:07

我认为在熊猫中使用内置字符串匹配功能可能会更成功。如果您有一个熊猫系列对象( DataFrame列是一个Series对象),它是一个字符串集合,您可以调用.str.<method>。有大量的字符串方法可用,但在本例中,您可以使用.str.match(...).str.contains(...)

这两种方法都接受正则表达式语句。这意味着将通配符表达式更改为regEx。

代码语言:javascript
复制
df[df.Column.str.match('select|DataFrame|row', case=False)]

                                          Column
0  select rows in pandas DataFrame using comparis...
1  select rows from a DataFrame based on values i...
3  selecting columns from a pandas dataframe base...
4  select particular columns from inside groups i...
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42187261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档