首页 > 解决方案 > 当映射到熊猫系列时,str.replace 方法在用户定义的函数中不起作用;但是,它适用于正常的函数调用。为什么?

问题描述

当映射到熊猫系列时,str.replace 方法在用户定义的函数中不起作用;但是,它适用于正常的函数调用。为什么?

RE_EMOJI = re.compile('[\U00010000-\U0010ffff]', flags=re.UNICODE)
def clean_story(x):

    x = x.strip() # trims leading and trailing whitespace only
    x = x.replace('\r', '').replace('\n', '') # remove all 3 types of line breaks
    translator = str.maketrans('','',string.punctuation) # strip punctuation, function
    x = x.translate(translator) # strip punctuation
    x = RE_EMOJI.sub(r'', x) # remove emojis
    x = re.sub(r'http\S+', '', x, flags=re.MULTILINE) # remove url http      
    x = re.sub(r'\(http\S+', '', x, flags=re.MULTILINE) # remove url (http
    x = re.sub(r'@\S+\s', '', x, flags=re.MULTILINE) # remove words starting with @
    x = re.sub(' +', ' ', x) # remove duplicated space
    x = x.lower() # lower case

    return x

x 是示例文本

x = " 概述 \n 使用 \r Home #; 自动化:控制应用程序 \r 很酷,但我们可以进一步利用它的强大功能来简化我们的日常任务,例如在离家前检查燃气、间歇泉、加热器、交流温度等. \n 范围\n 服务器(运行在 Windows 10 上的 Raspberry pi 2)在家中运行。家庭成员将通过他们的智能设备(如装有 Windows 操作系统或 Android 的手机)保持连接。服务器将连接到燃气、热和烟雾检测传感器。并将在检测到任何更改时向所有客户端(家庭成员)推送通知。服务器将使用 Microsoft Azure 通知中心向所有客户端推送通知。\n 组件和耗材 软件和应用程序摘要\n "

使用此文本作为示例:调用 clean_story(x) 会正确删除所有“\n”

“使用家庭自动化控制应用程序的概述很酷,但我们可以进一步利用它的功能来简化我们的日常任务,例如在离开家之前检查燃气间歇泉加热器的交流温度等,在 Windows 10 上运行的服务器树莓派 2 正在家里运行,家庭成员将通过他们的智能设备(如带有 Windows 操作系统或 Android 的手机)保持连接 服务器将连接到燃气热量和烟雾检测传感器,并将在检测到任何更改时向所有客户家庭成员推送通知 服务器将向所有客户推送通知使用 microsoft azure 通知中心组件和耗材软件和应用程序摘要'

但是,当将相同的文本放置在 pandas 数据框中并将函数映射到包含文本的系列时……除了 str.replace 之外,所有方法似乎都有效……我只剩下一堆“n”(注意:与“\n”相同,因为后面的方法删除了标点符号)

df_story['clean_story'] = df_story['story'].map(clean_story)

结果

'概述 n 使用家庭自动化来控制应用程序很酷,但我们可以进一步利用它的功能来简化我们的日常任务,例如在离开家之前检查燃气间歇泉加热器的交流温度等 n 范围 n 在 Windows 10 上运行的服务器树莓派 2 正在家里运行家庭成员将通过他们的智能设备保持联系,例如带有 Windows 操作系统或 Android 的手机 服务器将连接到燃气热量和烟雾检测传感器,并将在检测到任何变化时向所有客户家庭成员推送通知 服务器将推送通知到所有使用 microsoft azure 通知中心的客户端 n 组件和耗材软件和应用程序摘要 n'

标签: pythonarrayspython-3.xpandasfunction

解决方案


推荐阅读