【问题标题】:Python's equivalent to R's grepl and dplyr filter [duplicate]Python 相当于 R 的 grepl 和 dplyr 过滤器 [重复]
【发布时间】:2021-02-21 10:06:55
【问题描述】:

我想找到一种方法,使用类似于 dplyr 包的东西在 Python 中从 R 重新创建相同的命令代码。在 R 中我会这样做:

      library(dplyr)
  df <- data.frame(Countries=c('Brazil','Venezuela','Brazil, Colombia, Paraguay','Argentina','Peru','Andorra,Argentina,Chile,Uruguay'),
               Code=c(1,2,3,4,5,6))

df  %>% filter(grepl('(Brazil|Argentina)',Countries))

甚至:

    a=strsplit(as.character(df$Countries),',')
    a=lapply(a,FUN=function(t) gsub(" ","",t))
    ele=unlist(lapply(a,FUN=function(t) any(t%in%c('Brazil','Argentina'))))
    (df[ele,])

我想要的输出:

                   Countries Code
1                     Brazil    1
2 Brazil, Colombia, Paraguay    3
3                  Argentina    4
4    Argentina,Chile,Uruguay    6

在 Python 中我试过这个:

import pandas as pd
df = pd.DataFrame(dict(Countries=['Brazil','Venezuela','Brazil, Colombia, Paraguay','Argentina','Peru','Andorra,Argentina,Chile,Uruguay'], Code=[1,2,3,4,5,6]))

list_=['Brazil','Argentina']
print(df.loc[df['Countries'].isin(list_)])

但输出看起来像:

   Countries  Code
0     Brazil     1
3  Argentina     4

【问题讨论】:

    标签: python r pandas dplyr


    【解决方案1】:

    似乎您正在寻找带有对象dtypepd.Series.str 扩展(基本上您可以调用pd.Series.str.... 来获取专门用于处理正则表达式和其他string 的pandas 函数子集基于操作 - 但是这仅在数组是 dtype "object" 时才有效。

    mask = df["Countries"].str.contains("Brazil|Argentina")
    subset = df.loc[mask]
    
    print(subset)
                             Countries  Code
    0                           Brazil     1
    2       Brazil, Colombia, Paraguay     3
    3                        Argentina     4
    5  Andorra,Argentina,Chile,Uruguay     6
    

    一个巧妙的使用方法是使用 .join 函数在您的 list_ 变量上将其连接成一个可由正则表达式匹配模式使用的字符串。

    list_=['Brazil','Argentina']
    pattern = "|".join(list_) # Now we have "Brazil|Argentina" as a string
    
    mask = df["Countries"].str.contains(pattern)
    subset = df.loc[mask] # Same subset as the previous example
    

    在文档中查看除.str.contains 之外的文档和其他方法 https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.str.html

    【讨论】:

      猜你喜欢
      • 2016-12-09
      • 1970-01-01
      • 2016-06-28
      • 1970-01-01
      • 1970-01-01
      • 2020-03-20
      • 1970-01-01
      • 2023-03-12
      相关资源
      最近更新 更多