python - 从熊猫数据框中的文本中检索子字符串
问题描述
我有一个包含以下内容的 .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 对应的开始和结束索引。
解决方案
与其使用多个步骤,为什么不一口气做完所有事情?
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
)
推荐阅读
- reactjs - 计划推送通知不起作用
- python - 基于树莓派声音的红绿灯
- django - 如何使用 createAPI View 在 django rest 框架中保存 MultipointField
- c - 为什么我的函数的输出中会出现问号,我该如何避免它?
- java - Java - 模拟登录控制台 - 在询问密码之前验证用户名
- r - 修改顶部ggplot百分比条形图上的文本标签
- kotlin - Kotlin 如何通过消除检查异常来实现类型安全?
- firebase - 从 Flutter Web 发送邮件
- ios - 在 iOS PWA 上无法关闭“打开方式...”屏幕
- javascript - 如何在 JavaScript 中读取和处理 Excel 电子表格?