【发布时间】: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 效果很好,谢谢!