使用正则表达式在 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 函数