使用正则表达式在 Pandas 数据框中创建新列

Cam*_*593 6 python regex pandas

我在 Pandas df 类型object中有一个列,我想解析它以获取字符串中的第一个数字,并创建一个包含该数字的新列作为int.

例如:

现有的df

    col
    'foo 12 bar 8'
    'bar 3 foo'
    'bar 32bar 98'
Run Code Online (Sandbox Code Playgroud)

所需的 df

    col               col1
    'foo 12 bar 8'    12
    'bar 3 foo'       3
    'bar 32bar 98'    32
Run Code Online (Sandbox Code Playgroud)

我有适用于列系列中任何单个单元格的代码

int(re.search(r'\d+', df.iloc[0]['col']).group())

上面的代码工作正常并返回 12 。但是当我尝试使用整个系列创建一个新列时:

df['col1'] = int(re.search(r'\d+', df['col']).group())

我收到以下错误:

类型错误:预期的字符串或类似字节的对象

我想一个包裹str()围绕df['col']这摆脱了错误,但取得了全0在COL1

我还尝试转换col为 a listof 字符串并遍历list,这只会产生相同的错误。有谁知道我做错了什么?帮助将不胜感激。

Alb*_*lbo 11

这将解决问题:

search = []    
for values in df['col']:
    search.append(re.search(r'\d+', values).group())

df['col1'] = search
Run Code Online (Sandbox Code Playgroud)

输出如下所示:

            col    col1
0  foo 12 bar 8      12
1     bar 3 foo       3
2  bar 32bar 98      32
Run Code Online (Sandbox Code Playgroud)

  • 该列表与正则表达式方法(“search”)具有相同的名称,我觉得这有点令人困惑。`mylist = []`、`mylist.append...` 会让它成为一个更清晰的例子。 (3认同)