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

Posted

技术标签:

【中文标题】使用正则表达式在 Pandas 数据框中创建新列 [重复]【英文标题】:Creating New Column In Pandas Dataframe Using Regex [duplicate] 【发布时间】:2018-03-03 04:56:43 【问题描述】:

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

例如:

现有的df

    col
    'foo 12 bar 8'
    'bar 3 foo'
    'bar 32bar 98'

所需的df

    col               col1
    'foo 12 bar 8'    12
    'bar 3 foo'       3
    'bar 32bar 98'    32

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

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

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

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

我收到以下错误:

TypeError:预期的字符串或类似字节的对象

我尝试将 str() 包裹在 df['col'] 周围,这消除了错误,但在 col1 中产生了全 0

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

【问题讨论】:

查看DataFrame.apply() 方法。可能您的计算对于简单的分配来说太复杂了。 你可以试试df['col'].str.extract(r'(\d+)') @WiktorStribiżew,我还要添加expand=False... @WiktorStribiżew 效果很好,谢谢! 【参考方案1】:

这样就可以了:

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

df['col1'] = search

输出如下所示:

            col    col1
0  foo 12 bar 8      12
1     bar 3 foo       3
2  bar 32bar 98      32

【讨论】:

以上是关于使用正则表达式在 Pandas 数据框中创建新列 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何根据 Python Pandas 中的其他列在 DataFrame 中创建新列? [复制]

Pandas - 匹配来自两个数据帧的两列并在 df1 中创建新列

Pandas 定义在不同数据帧中创建新列时要调用的 Z_score 函数

如何在 python+numpy/pandas 中使用二值化在 json 文件中创建新列

如何在R中的空数据框中创建新列[重复]

根据其他列的值在多索引数据框中创建新列的简单方法