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

将正则表达式应用于pandas数据框

宋原
2023-03-14
问题内容

我在将正则表达式函数应用于python数据框中的列时遇到问题。这是我的数据框的标题:

               Name   Season          School   G    MP  FGA  3P  3PA    3P%
 74       Joe Dumars  1982-83   McNeese State  29   NaN  487   5    8  0.625   
 84      Sam Vincent  1982-83  Michigan State  30  1066  401   5   11  0.455   
 176  Gerald Wilkins  1982-83     Chattanooga  30   820  350   0    2  0.000   
 177  Gerald Wilkins  1983-84     Chattanooga  23   737  297   3   10  0.300   
 243    Delaney Rudd  1982-83     Wake Forest  32  1004  324  13   29  0.448

我以为我对将函数应用于Dataframes有很好的掌握,所以也许我缺少Regex技能。

这是我整理的:

import re

def split_it(year):
    return re.findall('(\d\d\d\d)', year)

 df['Season2'] = df['Season'].apply(split_it(x))

TypeError: expected string or buffer

输出将是名为Season2的列,其中包含连字符前的年份。我敢肯定,没有正则表达式,这是一种更简单的方法,但更重要的是,我正在努力弄清楚我做错了什么

感谢您的任何提前帮助。


问题答案:

当我尝试(一种变体)您的代码时,我得到了NameError: name 'x' is not defined-事实并非如此。

您可以使用

df['Season2'] = df['Season'].apply(split_it)

要么

df['Season2'] = df['Season'].apply(lambda x: split_it(x))

但是第二个只是编写第一个的一种较长且较慢的方式,因此没有太多意义(除非您要处理其他参数,我们不在这里。)尽管如此,您的函数将返回一个 list

>>> df["Season"].apply(split_it)
74     [1982]
84     [1982]
176    [1982]
177    [1983]
243    [1982]
Name: Season, dtype: object

尽管您可以轻松更改它。FWIW,我将使用向量化字符串操作并执行类似的操作

>>> df["Season"].str[:4].astype(int)
74     1982
84     1982
176    1982
177    1983
243    1982
Name: Season, dtype: int64

要么

>>> df["Season"].str.split("-").str[0].astype(int)
74     1982
84     1982
176    1982
177    1983
243    1982
Name: Season, dtype: int64


 类似资料:
  • 问题内容: 我已将一些定价数据读入pandas数据框中,其值显示为: 我想将其简化为数字值。我知道我可以遍历并应用正则表达式 到每个字段,然后将结果列表重新组合在一起,但是有没有一种循环的方式? 谢谢 问题答案: 您可以使用删除所有非数字: regex101演示

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

  • (?:x) (x) 这两个好像可以平价替换的吧。有什么特殊应用吗?

  • 问题内容: 我有这小段代码 应该打印 但是它什么也没打印! 问题答案: 欢迎使用Java的错误命名方法…它尝试并匹配所有输入。不幸的是,其他语言也纷纷效仿:( 如果要查看正则表达式是否与输入文本匹配,请使用和匹配器的方法: 如果确实要查看输入是否仅包含小写字母,则可以使用,但需要匹配一个或多个字符:将a附加+到字符类中,如中所示。或使用和。

  • 我正在努力想出一个正则表达式,它只能在单词的开头找到符号。例如: 这里: 但不是这里:

  • 昨天,我需要向正则表达式添加一个文件路径,创建一个如下所示的模式: 一开始正则表达式不匹配,因为包含几个正则表达式特定的符号,如 或 。作为快速修复,我将它们替换为 和 . 与 . 然而,我问自己,是否没有一种更可靠或更好的方法来清除正则表达式特定符号中的字符串。 Python 标准库中是否支持此类功能? 如果没有,您是否知道一个正则表达式来识别所有正则表达式并通过替代品清理它们?