首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我想从包含不同字符串的列中分离整数和浮点数

我想从包含不同字符串的列中分离整数和浮点数
EN

Stack Overflow用户
提问于 2019-09-20 16:14:23
回答 2查看 35关注 0票数 1

我尝试从我尝试过data['new'] = data['text'].str.extract(r'^\d+\.\d+$')的字符串列中仅提取整数和浮点数

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-20 16:24:41

如果需要仅提取包含数字的值:

代码语言:javascript
运行
复制
data = pd.DataFrame({'text':['20','45.45','ss4','7.4ds','dr']})
data['new'] = data['text'].str.extract(r'^(\d+\.\d+|\d+)$')
print (data)
    text    new
0     20     20
1  45.45  45.45
2    ss4    NaN
3  7.4ds    NaN
4     dr    NaN

然后转换为浮点数:

代码语言:javascript
运行
复制
data['new'] = data['text'].str.extract(r'^(\d+\.\d+|\d+)$').astype(float)
print (data)
    text    new
0     20  20.00
1  45.45  45.45
2    ss4    NaN
3  7.4ds    NaN
4     dr    NaN

或者使用to_numeric函数:

代码语言:javascript
运行
复制
data['new'] = pd.to_numeric(data['text'], errors='coerce')
print (data)
    text    new
0     20  20.00
1  45.45  45.45
2    ss4    NaN
3  7.4ds    NaN
4     dr    NaN
票数 1
EN

Stack Overflow用户

发布于 2019-09-20 16:24:51

您需要在regex中添加捕获组。

我假设了最简单的情况,因为您没有提供任何数据示例:

代码语言:javascript
运行
复制
>> df
               text
0     green123apple
1  yellow45.6banana

下面是新的正则表达式:"(\d+(?:\.\d+)?)"

如果我们拆分正则表达式,我们得到:

?:部分意味着您不想捕获这个内部组,您并不关心在单独的组中获取小数部分。你只想要整数。

输出:

代码语言:javascript
运行
复制
>> df["new"] = df["text"].str.extract("(\d+(?:\.\d+)?)")
>> df
               text   new
0     green123apple   123
1  yellow45.6banana  45.6
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58024433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档