我尝试从我尝试过data['new'] = data['text'].str.extract(r'^\d+\.\d+$')
的字符串列中仅提取整数和浮点数
发布于 2019-09-20 08:24:41
如果需要仅提取包含数字的值:
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
然后转换为浮点数:
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
函数:
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
发布于 2019-09-20 08:24:51
您需要在regex中添加捕获组。
我假设了最简单的情况,因为您没有提供任何数据示例:
>> df
text
0 green123apple
1 yellow45.6banana
下面是新的正则表达式:"(\d+(?:\.\d+)?)"
如果我们拆分正则表达式,我们得到:
?:
部分意味着您不想捕获这个内部组,您并不关心在单独的组中获取小数部分。你只想要整数。
输出:
>> df["new"] = df["text"].str.extract("(\d+(?:\.\d+)?)")
>> df
text new
0 green123apple 123
1 yellow45.6banana 45.6
https://stackoverflow.com/questions/58024433
复制相似问题