当前位置: 首页 > 面试题库 >

如何使用正则表达式提取pandas数据框中的特定内容?

阎宾实
2023-03-14
问题内容

考虑以下熊猫数据框:

In [114]:

df['movie_title'].head()

​
Out[114]:

0     Toy Story (1995)
1     GoldenEye (1995)
2    Four Rooms (1995)
3    Get Shorty (1995)
4       Copycat (1995)
...
Name: movie_title, dtype: object

更新: 我想用正则表达式提取电影的标题。因此,让我们使用以下正则表达式:\b([^\d\W]+)\b。所以我尝试了以下方法:

df_3['movie_title'] = df_3['movie_title'].str.extract('\b([^\d\W]+)\b')
df_3['movie_title']

但是,我得到以下信息:

0       NaN
1       NaN
2       NaN
3       NaN
4       NaN
5       NaN
6       NaN
7       NaN
8       NaN

关于如何从熊猫数据框中的文本中提取特定功能的任何想法?更具体地说,如何在全新的数据框中仅提取电影的标题?例如,所需的输出应为:

Out[114]:

0     Toy Story
1     GoldenEye
2    Four Rooms
3    Get Shorty
4       Copycat
...
Name: movie_title, dtype: object

问题答案:

您可以尝试str.extractstrip,但最好使用str.split,因为电影名称中也可以是数字。下一个解决方案是replace括号的内容regex以及strip 前导空格和尾随空格:

#convert column to string
df['movie_title'] = df['movie_title'].astype(str)

#but it remove numbers in names of movies too
df['titles'] = df['movie_title'].str.extract('([a-zA-Z ]+)', expand=False).str.strip()
df['titles1'] = df['movie_title'].str.split('(', 1).str[0].str.strip()
df['titles2'] = df['movie_title'].str.replace(r'\([^)]*\)', '').str.strip()
print df
          movie_title      titles      titles1      titles2
0  Toy Story 2 (1995)   Toy Story  Toy Story 2  Toy Story 2
1    GoldenEye (1995)   GoldenEye    GoldenEye    GoldenEye
2   Four Rooms (1995)  Four Rooms   Four Rooms   Four Rooms
3   Get Shorty (1995)  Get Shorty   Get Shorty   Get Shorty
4      Copycat (1995)     Copycat      Copycat      Copycat


 类似资料:
  • 问题内容: 我在将正则表达式函数应用于python数据框中的列时遇到问题。这是我的数据框的标题: 我以为我对将函数应用于Dataframes有很好的掌握,所以也许我缺少Regex技能。 这是我整理的: 输出将是名为Season2的列,其中包含连字符前的年份。我敢肯定,没有正则表达式,这是一种更简单的方法,但更重要的是,我正在努力弄清楚我做错了什么 感谢您的任何提前帮助。 问题答案: 当我尝试(一种

  • 问题内容: 我写了以下正则表达式来标记某些短语模式 此模式将正确标记短语,例如: 并使用2个短语给出所需的输出: 披萨很好 意大利面不好 但是,如果我的句子是这样的: 仅匹配短语: 而不是所需的: 我如何在第二个示例中也加入正则表达式模式? 问题答案: 首先,让我们看一下NLTK提供的POS标签: (注意:以上是NLTK v3.1的输出,旧版本可能有所不同) 您实际上想要捕获的是: NN VBD

  • 问题内容: 我只是想使用jmeter提取json响应数据,但不能这样做。 我得到类似的东西。 我正在尝试但无法获得。 谁能帮我使这个工作正常? 问题答案: 外观在响应中是否唯一(仅出现一次)? 如果是这样,您可以简单地使用正则表达式提取器添加到HTTP请求中,该请求器返回json响应,并带有如下正则表达式: `` 并将进一步提取的值称为。 但是,如果您的情况更加复杂,并且在json响应中出现了几种

  • 问题内容: 我有一些粗略的字符串: 我想使用Java Regex类提取[some number]中的文本。 我大致知道我想使用什么正则表达式(尽管欢迎所有建议)。我真正感兴趣的是Java调用以获取正则表达式字符串并将其用于源数据以产生[some number]的值。 编辑:我应该补充一点,我只对单个[一些数字](基本上是第一个实例)感兴趣。源字符串很短,我不会寻找[some number]的多次出

  • 问题内容: 我想提取所有 用 大括号括起来的 单词 ,所以我有一个这样的表达式 匹配的字符串可能包含任意多个这样的单词,但是我开始认为我正在以错误的方式解决此问题。 我的尝试 而且我尝试将花括号这些词提取为组,以便可以使用每一个匹配项。所以,我做了一个正则表达式: 注意:我使用的是JRegex语法,因此我需要避免掉一些curl。 结果 我得到的结果是一个(虽然是正确的)比赛,而我希望有两个比赛和。

  • 我正在尝试使用一个Java正则表达式来提取数据。它符合我的数据,但我无法得到组数据。我正在尝试获取数据1,xmlAggregator,268803451,3。查看文档,我假设如果在\d+和\w+周围加上(),就会得到组中的数字和字符串。对如何更改正则表达式有什么建议吗? 字符串: Java代码: 输出: 希望得到: