我有一个pandas数据帧中的列,类型为object
,我想解析该列以获取字符串中的第一个数字,并创建一个包含该数字作为int
的新列。
例如:
现有数据帧
col
'foo 12 bar 8'
'bar 3 foo'
'bar 32bar 98'
期望的数据框
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: expected string or bytes-like object
我尝试在df ['col']周围包装str(),这消除了错误,但在col1中产生了所有的0。
我还尝试将col转换为字符串列表,并通过列表进行迭代,但只会产生相同的错误。有人知道我做错了什么吗?非常感谢您的帮助。
DataFrame.apply()
方法。可能你的计算过于复杂无法使用简单赋值。 - Dave Kielpinskidf['col'].str.extract(r'(\d+)')
。 - Wiktor Stribiżewexpand=False
... - MaxU - stand with Ukraine