如何在Pandas中提取字符串H后的数字并填充指定列?
解决方案
要实现需求,最可靠的方式是用正则表达式提取,替代固定位置切片或str.find的方法,具体步骤如下:
核心思路
用正则匹配字符串中字母H后面紧跟的第一个数字,提取后转为数值类型,再仅填充H-Type列中原为NaN的行,保留已有非空值。
代码实现
import pandas as pd import numpy as np inp = [{"H-Type": np.nan, 'SomeValue': "Influenza A(H1N1)pdm09 Virus"}, {"H-Type": np.nan, 'SomeValue': "Influencer A(H3N2) Virus"}, {"H-Type": 1, 'SomeValue': "Influenza A Virus"}, {"H-Type": np.nan, 'SomeValue': "Influenza A Virus"}] df = pd.DataFrame(inp) # 提取H后面的第一个数字,无匹配则返回NaN extracted_h_type = df['SomeValue'].str.extract(r'H(\d)', expand=False).astype(float) # 仅填充原H-Type列的NaN值,保留已有数据 df['H-Type'] = df['H-Type'].fillna(extracted_h_type) print(df)
结果验证
运行后df的H-Type列结果完全符合预期:
- 第0行:1
- 第1行:3
- 第2行:1(保留原有值)
- 第3行:NaN(无匹配数字)
为什么str.find方法容易出问题
- 当字符串中不存在
H时,str.find返回-1,后续用str.slice会提取错误位置的字符,最终转整数时生成NaN; - 若
H在字符串中的位置不固定,固定位置切片或基于find的切片都会失效,正则则能精准定位H后的数字,不受位置影响。
内容的提问来源于stack exchange,提问作者DrWhat
相关产品推荐
相关产品推荐

