You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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方法容易出问题

  1. 当字符串中不存在H时,str.find返回-1,后续用str.slice会提取错误位置的字符,最终转整数时生成NaN;
  2. 若H在字符串中的位置不固定,固定位置切片或基于find的切片都会失效,正则则能精准定位H后的数字,不受位置影响。

内容的提问来源于stack exchange,提问作者DrWhat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 04:45:41