python - 更改 pandas 中的特定字符
问题描述
背景
我有以下内容df
,其中包含标记化Text
和P_Name
列,并且是在字符串修改中包含单词边界的修改以更具体
P_Name = [list(['Steven', 'I','Jobs']),
list(['A', 'Ma', 'Mary']),
list(['U','Kar', 'Jacob'])]
Text = [list(['Steven', 'I','Jobs', 'likes', 'apples','I', 'too']),
list(['A','i', 'like', 'A', 'lot', 'of','sports','cares', 'A', 'Ma', 'Mary']),
list(['the','U', 'Kar', 'Jacob', 'what', 'about', 'U', 'huh','?'])]
import pandas as pd
df = pd.DataFrame({'Text' : Text,
'P_ID': [1,2,3],
'P_Name' : P_Name,
})
df
P_ID P_Name Text
0 1 [Steven, I, Jobs] [Steven, I, Jobs, likes, apples, I, too]
1 2 [A, Ma, Mary] [A, i, like, A, lot, of, sports, cares, A, Ma, Mary]
2 3 [U, Kar, Jacob] [the, U, Kar, Jacob, what, about, U, huh, ?]
目标
1) 使用名称 in通过放置P_Name
来阻止列中的相应文本Text
**block**
2)产生一个新列New_Text
试过了
我已经修改了代码并尝试了以下
df['New_Text']=[pd.Series(x).replace(dict.fromkeys(y,'**block**') ).str.cat(sep=' ')for x , y in zip(df['Text'],df['P_Name'])]
这与我想要的很接近,但不完全是因为某些字母被不恰当地标记,**block**
例如I
在行中0
P_ID P_Name Text New_Text
0 [**block**, **block**, **block**, likes, apples, **block**, too]
1 [**block**, i, like, **block**, lot, of, sports, cares, **block**, **block**, **block**]
2 [the, **block**, **block**, **block**, what, about, **block**, huh, ?]
期望的输出
P_ID P_Name Text New_Text
0 [**block**, **block**, **block**, likes, apples, I, too]
1 [A, i, like, A, lot, of, sports, cares, **block**, **block**, **block**]
2 [the, **block**, **block**, **block**, what, about, U, huh, ?]
问题
如何进一步修改
df['New_Text']=[pd.Series(x).replace(dict.fromkeys(y,'**block**') ).str.cat(sep=' ')for x , y in zip(df['Text'],df['P_Name'])]
或使用新代码来实现我想要的输出?
解决方案
您希望标记中P_Name
序列的每个有序出现。Text
这可以通过对Text
令牌进行迭代并检查整个P_Name
令牌的相等性来实现:
df["New_Text"] = df["Text"].apply(lambda tokens: tokens.copy()) # copy original tokens
for tokens, name in zip(df["New_Text"], df["P_Name"]):
for i, token in enumerate(tokens):
if tokens[i:i + len(name)] == name:
tokens[i:i + len(name)] = ["**block**"] * len(tokens[i:i + len(name)])
根据您的用例,您可能有未标记的Text
(& P_name
) 可用。如果是这样,则可以改为进行子字符串匹配,然后执行标记化。
推荐阅读
- django - linux 上的 FF92.0 引入了 django 3.2 内联表单的缓存问题
- javascript - 使用 ajax 结果获取 php 变量值
- imgur - Imgur Api 访问收藏夹
- python - 在 Python 中使用 Selenium 查找元素
- django - url Django 中的波斯文文本
- background-service - 在 .Net 5 Worker 服务中创建会话
- bash - BASH - SED 在最后一行之前插入新行,包含制表符和变量
- reactjs - 无法在 reactjs 的 ckeditor5 中实现提及
- python - 我需要点击一个td,但是selenium报错“selenium.common.exceptions.NoSuchElementException: Message: no such element”
- python - 当季节长度不同时,如何在 python 中执行 SARIMA?