python - 根据字符串上的特定条件删除行
问题描述
给定这个数据框(这是我的一个子集):
用户名 | 用户信息 |
---|---|
波洛普 | 我喜欢这张照片,非常漂亮 |
阿蒂尔 | 咩 |
阿廷戈 | Es un cuadro preciosa, me recuerda a mi infancia。 |
佐纳 | 我喜欢 |
所以我 | 哎呀,说我讨厌它是一种委婉说法 |
伊尤 | 钠 |
我想要做的是删除一些单词(标记)少于 5 个单词并且不是用英语写的行。我对熊猫不熟悉,所以我想出了一个不太好的解决方案:
import pandas as pd
from langdetect import detect
index = 0
index_list = []
for review in df["user_message"]:
count = 0
if str(review) == "NaN":
index_list.append(index)
continue
for i in review:
if(i.isspace()):
count=count+1
if len(review) == 0:
index_list.append(index)
elif review.isspace() is True:
index_list.append(index)
elif count < 5:
index_list.append(index)
else:
try:
detect(review)
if detect(review) != "en":
index_list.append(index)
else:
pass
except:
pass
index = index + 1
df = df.drop(index_list, axis = 0).reset_index(drop = True)
这个解决方案显然不起作用(我的数据框和行中只有一个单词的空白行),我确信它存在另一种有效的方法,那就是更快。你知道如何解决这个问题吗?
谢谢你。
编辑:所以我终于让它工作了,感谢@ansev的回答。由于如果发送的请求过多,TextBlob 会引发错误,因此我依赖 langdetect 模块。下面是对应的代码:
m1 = df['user_message'].str.split(' ').str.len() > 5
m2 = df['user_message'].str.isspace()
df_filtered = df.loc[m1 | m2 == False].reset_index(drop=True)
m3 = df_filtered['user_message'].astype(str).apply(lambda x: detect(x) if len(x) >= 5).eq('en')
df_filtered = df_filtered.loc[m3].reset_index(drop=True)
我必须单独执行 m3,因为如果检测无法识别文本,则会引发错误(这通常是由仅包含空格的字符串引起的,这是我的 m2 条件,它检查单元格是否仅包含空格(因此返回 True如果是这样))。
解决方案
利用:
from textblob import TextBlob
m1 = df['user_message'].astype(str).apply(lambda x: TextBlob(x).detect_language()
if len(x) >= 3 else '').eq('en')
m2 = df['user_message'].str.split(' ').str.len() > 5
df_filtered = df.loc[m1 | m2]
print(df_filtered)
username user_message
0 Polop I love this picture, which is very beautiful
2 Artingo Es un cuadro preciosa, me recuerda a mi infancia.
3 Zona I like it
4 Soi Yuck, to say I hate it would be a euphemism
检查安装
推荐阅读
- swift - Carriage return character not being matched in Swift
- github - GitHub - 提交消息限制
- react-native - 日期时间选择器 setState 搞砸了我的状态
- docker - 尝试访问 db-user-pass secret
- reactjs - 为什么`npx create-react-app my-app --typescript`不给我打字稿bo
- vue.js - 从相同的插槽名称动态渲染组件
- bison - (Array Parser) 令牌解析 flex/bison 奇怪的行为
- node.js - React 选择菜单 - 选择多个项目 - 高级
- azure-pipelines - 将已编译的 DLL 复制到管道中的源代码控制
- python - 如何修复“在 seaborn 热图上将带有缺失值 (nan) 的 cmap 居中”