【问题标题】:Python pandas: Remove emojis from DataFramePython pandas:从 DataFrame 中删除表情符号
【发布时间】:2021-03-14 11:17:19
【问题描述】:

我有一个包含许多不同表情符号的数据框,我想删除它们。我查看了类似问题的答案,但它们对我不起作用。

index| messages
----------------
1    |Hello! ???? 
2    |Good Morning ????  
3    |How are you ?
4    | Good ????
5    | Ländern

现在我想从 DataFrame 中删除所有这些表情符号,使其看起来像这样

    index| messages
    ----------------
    1    |Hello!
    2    |Good Morning   
    3    |How are you ?
    4    | Good 
    5    |Ländern

我在这里尝试了解决方案,但不幸的是它也删除了所有非英文字母,如“ä” How can I remove emojis from a dataframe?

【问题讨论】:

  • 请从输出/控制台按原样粘贴数据框。不要格式化。
  • @Vishnudev 不幸的是,我不允许共享实际数据帧,这就是我格式化它的原因
  • 我指的是样本本身,不要放-|
  • 哦,我明白了,谢谢。 (第一次发问题,不知道怎么写)

标签: python python-3.x dataframe emoji


【解决方案1】:

我认为以下内容正在回答您的问题。我添加了一些其他字符进行验证。

import pandas as pd
df = pd.DataFrame({'messages':['Hello! ?', 'Good-Morning ?', 'How are you ?', ' Goodé ?', 'Ländern' ]})

df['messages'].astype(str).apply(lambda x: x.encode('latin-1', 'ignore').decode('latin-1'))

【讨论】:

    【解决方案2】:

    此解决方案将保留所有 ASCII 和 latin-1 字符,即 this list 中 U+0000 和 U+00FF 之间的字符。对于扩展拉丁语加希腊语,请使用 < 1024:

    df = pd.DataFrame({'messages': ['Länder ??❤️', 'Hello! ?']})
    
    filter_char = lambda c: ord(c) < 256
    df['messages'] = df['messages'].apply(lambda s: ''.join(filter(filter_char, s)))
    

    结果:

      messages
    0  Länder 
    1  Hello!
    

    请注意,这不适用于例如日文文本。另一个问题是,心脏“表情符号”实际上是一个Dingbat,所以我不能简单地过滤Unicode的Basic Multilingual Plane,哦,好吧。

    【讨论】:

    • 效果很好,标志的额外积分;-)
    • 非常感谢这对我有用 (Vielen Dank)
    • 如果这在某些情况下不起作用,您也可以尝试filter(lambda c: c.isalpha(), s) - 例如应该处理日语。但它确实过滤了!——哦,好吧。
    • 我们不应该将 lambda 表达式分配给变量。 df['messages'] = df['messages'].apply(lambda s: ''.join(filter(lambda c: ord(c) &lt; 256, s))) 是正确的。
    猜你喜欢
    • 2016-08-18
    • 1970-01-01
    • 2020-02-10
    • 2017-09-25
    • 2018-05-29
    • 2017-10-09
    • 1970-01-01
    • 2012-10-20
    • 2021-12-22
    相关资源
    最近更新 更多