【问题标题】:TypeError: expected string or bytes-like object Regular expression removing special charactersTypeError:预期的字符串或类似字节的对象正则表达式删除特殊字符
【发布时间】:2020-10-17 02:02:42
【问题描述】:

使用内容列训练数据框。内容列的每一行都有一个列表,其中包含该列表中的不同单词。

content
[sure, tune, …, watch, donald, trump, “,”, late, ’ , night]
[abc, xyz, “,”,late, ’, night]

删除正则表达式的代码

import re
train['content'] = train['content'].map(lambda x: re.sub(r'\W+', '', x))

错误

TypeError: expected string or bytes-like object

预期输出

content
[sure, tune,  watch, donald, trump, late,   night]
[abc, xyz,late, night]

请注意所有特殊字符,如 ... 都消失了,我们只剩下文字了。

【问题讨论】:

  • 首先 - 每行内容必须是一个字符串本身,而不是一个实际的列表,否则你甚至在开始之前就会遇到语法错误,应该澄清一下。
  • 每一行内容都是一个列表
  • 那么列表中的所有项目都定义了变量吗?列表本身必须是字符串,项目必须是字符串/数字,或者它们是先前定义的变量。

标签: python pandas


【解决方案1】:

只要做:

content=['sure', 'tune', '…', 'watch', 'donald', 'trump', '“,”', 'late', '’' , 'night']
content = list(map(lambda x: re.sub(r'\W+', '', x),content))

【讨论】:

  • 内容是数据集中的一列。内容列有 30,000 行....这两行只是一个例子
  • 主要思想是通过正则表达式解析字符串不是吗?执行 content=train['content'].tolist() 并在数据框列上重新分配或执行 foreach;在我看来,无论如何你都需要额外的转换。
【解决方案2】:

您正在尝试将正则表达式应用于 List 对象。

如果您的目标是在列表的每个项目上使用此正则表达式,您可以为列表中的每个项目应用 re.sub:

import re
def replace_func(item):
    return re.sub(r'\W+', '', item)

train['content'] = train['content'].map(lambda x: [replace_func(item) for item in x])

【讨论】:

  • 不起作用.......这是分隔所有单个字母
  • 如果您的内容字段中有字符串,它将分隔各个字母。我假设内容字段中的所有元素都是一个列表。 train.content.map(type).value_counts() 显示了什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-31
  • 1970-01-01
  • 2020-10-20
  • 2018-10-17
  • 2020-07-08
  • 2018-05-04
  • 2017-08-29
相关资源
最近更新 更多