Python Pandas中使用apply函数进行中文分词时出现'TypeError: expected string or bytes-like object'的解决方法

在使用Python Pandas库处理数据时,我们经常需要对DataFrame中的某一列应用自定义函数进行操作,而apply()函数就提供了一种便捷的方式。然而,在处理中文文本数据时,如果使用apply()函数进行中文分词,可能会遇到'TypeError: expected string or bytes-like object'的错误。

错误原因

这个错误通常是由于在调用正则表达式函数re.findall()时,传入的参数类型不是字符串或字节对象导致的。例如,在下面的代码中,我们定义了一个chinese_word_cut()函数用于对中文文本进行分词,并尝试使用apply()函数将其应用于DataFrame的'content'列:pythonimport pandas as pdimport re

def chinese_word_cut(mytext): # 文本预处理 :去除一些无用的字符只提取出中文出来 new_data = re.findall('[一-龥]+', mytext, re.S) new_data = ' '.join(new_data) # 文本分词 # ...

data1['content_cutted'] = data1.content.apply(chinese_word_cut)

如果'content'列中包含非字符串类型的数据,例如数字或NaN值,那么在执行re.findall('[一-龥]+', mytext, re.S)时就会抛出'TypeError: expected string or bytes-like object'的错误。

解决方法

要解决这个问题,我们需要确保在调用chinese_word_cut()函数之前,传入的参数mytext是字符串类型。可以使用以下两种方法:

  1. **在定义chinese_word_cut()函数时进行类型检查:**pythondef chinese_word_cut(mytext): if isinstance(mytext, str): # 文本预处理 :去除一些无用的字符只提取出中文出来 new_data = re.findall('[一-龥]+', mytext, re.S) new_data = ' '.join(new_data) # 文本分词 # ... return new_data else: return ''

  2. **在调用apply()函数之前,将'content'列转换为字符串类型:**pythondata1['content_cutted'] = data1.content.astype(str).apply(chinese_word_cut)

示例

假设我们有一个DataFrame如下:

content0 你好,世界!1 1232 NaN

使用第二种解决方法,修改后的代码如下:pythonimport pandas as pdimport re

def chinese_word_cut(mytext): # 文本预处理 :去除一些无用的字符只提取出中文出来 new_data = re.findall('[一-龥]+', mytext, re.S) new_data = ' '.join(new_data) # 文本分词 # ... return new_data

data1 = pd.DataFrame({'content': ['你好,世界!', 123, None]})data1['content_cutted'] = data1.content.astype(str).apply(chinese_word_cut)print(data1)

输出结果:

   content content_cutted0  你好,世界!         你好 世界1        123              2        None              

可以看到,'content'列中的所有数据都被成功地转换为了字符串类型,并且chinese_word_cut()函数也成功地对中文文本进行了分词。

总结

在使用Pandas的apply()函数处理中文文本数据时,务必注意参数类型的一致性,避免出现'TypeError: expected string or bytes-like object'的错误。如果遇到该错误,可以通过类型检查或数据类型转换的方式进行解决。

Python Pandas中使用apply函数进行中文分词时出现TypeError: expected string or bytes-like object的解决方法

原文地址: https://www.cveoy.top/t/topic/evxk 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录