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

如何在pandas DataFrame的文本列中提取giraffe+四位数字格式的子串

解决方案

核心问题原因

原有代码的错误点在于生成Giraffe_numbers列时,每次切片都调用了Giraffe_Index整列的最大值作为起止位置,没有逐行读取每行对应的索引值,导致所有行都用了同一个切片范围。

最优实现方案(推荐)

直接使用pandas内置的str.extract方法,通过正则匹配直接提取目标格式内容,无需手动计算索引,代码更简洁容错性更高:

import pandas as pd
file_path = 'test.csv'
data = pd.read_csv(file_path)

# 正则匹配giraffe+4位数字的格式,括号内为需要提取的内容
data['Giraffe_numbers'] = data['text'].str.extract(r'(giraffe\d{4})')
# 可选:保留Giraffe_Present标记列,匹配到内容为True,否则为False
data['Giraffe_Present'] = data['Giraffe_numbers'].notna()

# 导出结果到新csv文件
data.to_csv('new_test.csv', index=False)
print(data)

兼容原有逻辑的修改方案

如果你需要沿用手动计算索引的实现思路,只需要调整最后生成Giraffe_numbers的逻辑,改为按行遍历读取当前行的索引值即可:

import pandas as pd
file_path = 'test.csv'
data = pd.read_csv(file_path)
sub = "giraffe"

data['Giraffe_Present'] = data['text'].str.contains(sub)
data["Giraffe_Index"] = data['text'].str.find(sub)
# axis=1表示按行遍历,直接取当前行的索引值计算切片范围
data['Giraffe_numbers'] = data.apply(
    lambda row: row['text'][row['Giraffe_Index']:row['Giraffe_Index']+11] if row['Giraffe_Present'] else None,
    axis=1
)

data.to_csv('new_test.csv', index=False)
print(data)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 01:54:04