值错误:无法将字符串转换为浮点数:" "(空字符串?



我如何去删除一个空字符串或至少有正则表达式忽略它?

我有一些像这样的数据

EIV (5.11 gCO₂/t·nm)

我只想提取数字。我做了以下的事情:

df['new column'] = df['column containing that value'].str.extract(r'((d+.d*)|(d+)|(.d+)|(d+[eE][+]?d*)?)').astype('float')

因为数字可以是浮点数,整数,我想有一个指数4E+1

然而,当我运行它时,我得到的错误标题,我假定是一个空字符串。

我在这里错过了什么让代码运行?

试试这个

import re
c = "EIV (5.11 gCO₂/t·nm)"
x = re.findall("[0-9]*.?[0-9]+(?:[eE][-+]?[0-9]+)?", c)
print(x)

会给

['5.11']

问题不仅在于组的数量,而且在于regex中的最后一个选项是可选的(参见后面添加的?,以及您的regex演示)。但是,由于Series.str.extract返回第一个匹配,如果匹配不在字符串的开始位置,则regex匹配并返回字符串开头的空字符串。

最好使用众所周知的单个可选模式来匹配任何数字与单个捕获组,例如

df['col'].str.extract(r'((?:(?:b[0-9]+)?.)?b[0-9]+(?:[eE][-+]?[0-9]+)?)b').astype(float)

参见匹配通用编程语言结构的正则表达式示例

熊猫测试:

import pandas as pd
df = pd.DataFrame({'col':['EIV (5.11 gCO₂/t·nm)', 'EIV (5.11E+12 gCO₂/t·nm)']})
df['col'].str.extract(r'((?:(?:b[0-9]+)?.)?b[0-9]+(?:[eE][-+]?[0-9]+)?)b').astype(float)
# =>               0
#    0  5.110000e+00
#    1  5.110000e+12

也有相当多的其他类似的regex变体解析科学符号?,也可以使用r"([-+]?[0-9]*.?[0-9]+(?:[eE][-+]?[0-9]+)?)"r"(-?d+(?:.d*)?(?:[eE][+-]?d+)?)"r"([+-]?(?:0|[1-9]d*)(?:.d+)?(?:[eE][+-]?d+)?)"等。

如果您的专栏包含相同格式的数据(如您发布的- EIV (5.11 gCO₂/t·nm)),那么它肯定会起作用

import pandas as pd    
df['new_exctracted_column'] = df['column containing that value'].str.extract('(d+(?:.d+)?)')
df
5.11

最新更新