regex - 没有匹配项时的 Pandas 正则表达式替换
问题描述
我正在使用pandas.Series.str.replace从字符串中提取数字(其数据已从@WPWeather中抓取),并且已经将所有字段提取到这样的 DataFrame 中...
df.head()
Out[48]:
temp pressure relative_humidity \
created_at
2019-12-13 10:19:13 5.2\xc2\xbaC, 975.4mb, 91.3%.
2019-12-12 10:19:07 2\xc2\xbaC, 990.3mb, 96.9%.
2019-12-11 10:19:07 4.2\xc2\xbaC, 1000.8mb, 85.7%.
2019-12-10 10:19:00 6.3\xc2\xbaC, 1008.5mb, 94.4%.
2019-12-09 10:18:51 5.4\xc2\xbaC, 1006.7mb, 68.5%.
last_24_max_temp last_24_min_temp rain sunshine
created_at
2019-12-13 10:19:13 7\xc2\xbaC, 2\xc2\xbaC, 9.5mm, 0
2019-12-12 10:19:07 6\xc2\xbaC, 1.5\xc2\xbaC, 0.9mm.' NaN
2019-12-11 10:19:07 11.7\xc2\xbaC, 2.2\xc2\xbaC, 14.1mm.' NaN
2019-12-10 10:19:00 6.5\xc2\xbaC, 1.9\xc2\xbaC, 1.1mm.' NaN
2019-12-09 10:18:51 8.5\xc2\xbaC, 5.2\xc2\xbaC, 1.5mm, 1.9
我正在尝试使用正则表达式来提取数值...
pd.to_numeric(df['temp'].str.replace(r'(^-?\d+(?:\.\d+)?)(.*)', r'\1', regex=True))
...而且效果很好,但是我遇到了一个实例,其中一个温度场没有值并且很简单\xc2\xbaC,
,因此在第一个分组中没有任何匹配项可以使用r'\1'
以及何时尝试转换为数字失败...
pandas/_libs/lib.pyx in pandas._libs.lib.maybe_convert_numeric()
ValueError: Unable to parse string "\xc2\xbaC," at position 120
如何用诸如空白之类的理智替换不匹配的内容,以便在我调用pd.to_numeric()
时将其转换为NaN
?
解决方案
Onde 的想法是更改字符串以进行替换,然后得到不存在的值得到缺失值:
df['temp'] = pd.to_numeric(df['temp'].str.replace(r'\xc2\xbaC,', '', regex=True))
print (df)
temp pressure relative_humidity
created_at
2019-12-13 10:19:13 5.2 975.4mb, 91.3%.
2019-12-12 10:19:07 2.0 990.3mb, 96.9%.
2019-12-11 10:19:07 4.2 1000.8mb, 85.7%.
2019-12-10 10:19:00 6.3 1008.5mb, 94.4%.
2019-12-09 10:18:51 5.4 1006.7mb, 68.5%.
您的解决方案应使用参数errors='coerce'
in更改以to_numeric
将非数字替换为缺失值:
df['temp'] = (pd.to_numeric(df['temp'].str.replace(r'(^-?\d+(?:\.\d+)?)(.*)',r'\1',regex=True),
errors='coerce'))
推荐阅读
- angular - 如何检查Angular / Ionic中的两个字段是否相等?
- unity3d - Autodesk AR/VR Toolkit Server v2 问题
- ios - 有时分配给 UITableViewCell 中的 UIImageView 的图像不正确
- azure - 4.7.1 中的 Azure Key Vault 配置生成器
- robotframework - Robot Framework:: 如何排除测试套件
- php - 解析服务器模拟以进行测试
- c# - .NET C# 中缺少密码解密代码
- postgresql - Postgresql 远程访问没有主机的 pg_hba.conf 条目
- c# - 接口成员不能有定义
- azure - 如何将 Azure VM 代理 WindowsAzure 文件夹移动到其他驱动器