繁体   English   中英

删除非ascii字符时如何完全删除行?

[英]How to remove row completely when removing non-ascii characters?

我正在使用下面的代码删除下面的所有非英文字符:

DF.text.replace({r'[^\x00-\x7F]+':''}, regex=True, inplace=True)

其中 df 有一个名为 text 的列,其中包含如下文本:

        text
hi what are you saying?
okay let me know
sounds great, mikey
ok.
right
ご承知のとおり、残念ながら悪質な詐欺が増加しているようですのでお気を付けください。\n
¡Hola miguel! Lamento mucho la confusión cau

预期输出:

          text
    hi what are you saying?
    okay let me know
    sounds great, mikey
    ok.
    right

对于我的代码删除字符的行 -

我想从 df 中完全删除这些行,这意味着如果它确实替换了任何非英文字符,我想从 df 中完全删除该行以避免该行包含 0 个字符或一些在它们之后毫无意义的字符已经被上面的代码改变了。

您可以使用

df[~df['text'].str.contains(r'[^\x00-\x7F]')]

熊猫测试:

import pandas as pd
df = pd.DataFrame({'text': ['hi what are you saying?', 'ご承知のとおり、残念ながら悪質な詐欺が増加しているようですのでお気を付けください。'], 'another_col':['demo 1', 'demo 2']})
df[~df['text'].str.contains(r'[^\x00-\x7F]')]
#                      text another_col
# 0  hi what are you saying?      demo 1

笔记:

  • df['text'].str.contains(r'[^\\x00-\\x7F]')查找text列中包含除 ASCII 字符以外的字符的所有值(它是我们的“掩码”)
  • df[~...]只保留那些与正则表达式不匹配的行。

str.contains()返回一系列布尔值,我们可以用它来索引我们的框架

patternDel = "[^\x00-\x7F]"
filter = df['Event Name'].str.contains(patternDel)

我倾向于保留我们想要的东西而不是删除行。 由于过滤器代表我们想要删除的东西,我们使用 ~ 来获取所有不匹配的行并保留它们

df = df[~filter]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM