【问题标题】:Creating New Column In Pandas Dataframe Using Regex [duplicate]使用正则表达式在 Pandas 数据框中创建新列 [重复]
【发布时间】: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 效果很好,谢谢!

标签: python regex pandas


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-02
    • 2014-12-17
    • 2017-12-01
    • 2019-08-22
    • 2020-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多