首页 > 解决方案 > 从熊猫数据框中的文本中检索子字符串

问题描述

我有一个包含以下内容的 .csv 文件。

在此处输入图像描述

我希望能够生成一个 .csv,其中包含一列以显示长颈鹿<4 位数字> 当该模式在“文本”列中可用时。

到目前为止,我已经编写了以下代码,它不会为 Giraffe_numbers 动态/为每一行计算切片开始和结束索引。

import pandas as pd
file_path = 'test.csv'
data = pd.read_csv(file_path)
sub = "giraffe"
# column to identify if Giraffe is present
data['Giraffe_Present'] = data['text'].str.contains(sub)
# column to identify index of Giraffe in text
data["Giraffe_Index"] = data['text'].str.find(sub)
# column to identify starting position for slice
data['Giraffe_start'] = data['Giraffe_Index'].apply(lambda row: row)
# column to identify ending position for slice
data['Giraffe_end'] = data['Giraffe_Index'].apply(lambda row: row+11)
# column to store sliced Giraffe number from text
data['Giraffe_numbers'] = data['text'].apply(lambda row: row[data['Giraffe_Index'].apply(lambda row: row).max():data['Giraffe_Index'].apply(lambda row: row+11).max()])
print(data)

这是输出。#2、#4 和 #5 的结果有偏差,因为 Giraffe_numbers 使用与 #1 对应的开始和结束索引。

在此处输入图像描述

标签: pythonpandas

解决方案


与其使用多个步骤,为什么不一口气做完所有事情?

data['Giraffe_numbers'] = data.apply(
    lambda row: row['text'][
        row["text"].find('giraffe') : row['text'].find('giraffe') + 11
    ]
    if row['text'].find('giraffe') > 0
    else '',
    axis=1
)

推荐阅读