You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Python对DataFrame指定列分词时的float类型TypeError?

问题解决:分词时出现TypeError: expected string or bytes-like object, got 'float'

问题根源

  1. 文件读取方式错误:你用pd.read_csv()读取.xlsx格式的Excel文件,这会导致数据读取异常,应改用pd.read_excel()。
  2. 列中存在缺失值:CD列里的缺失值以float类型的NaN存在,而RegexpTokenizer.tokenize()仅支持处理字符串类型,因此触发类型错误。

解决方案

步骤1:修正文件读取逻辑

先把读取代码改为正确的Excel读取方法:

import pandas as pd
from nltk.tokenize import RegexpTokenizer

# 修正读取方式
df = pd.read_excel(r"D:\......PATH\sample_regex.xlsx")

步骤2:处理列中的非字符串值

以下三种方式任选其一即可:

方式一:将整列转为字符串处理

把CD列所有值统一转为字符串,再执行分词,缺失值会被转为'nan',可进一步处理为空列表:

regexp = RegexpTokenizer('\w+')
# 转字符串后分词
df['CDnew'] = df['CD'].astype(str).apply(regexp.tokenize)
# 将'nan'对应的分词结果转为空列表
df['CDnew'] = df['CDnew'].apply(lambda x: [] if x == ['nan'] else x)
方式二:填充缺失值后分词

用空字符串或自定义占位符填充缺失值,再执行分词:

regexp = RegexpTokenizer('\w+')
# 用空字符串填充缺失值
df['CD'] = df['CD'].fillna('')
df['CDnew'] = df['CD'].apply(regexp.tokenize)
方式三:在分词函数中加入类型判断

仅对字符串类型的值执行分词,非字符串类型直接返回空列表:

regexp = RegexpTokenizer('\w+')

def tokenize_text(text):
    if isinstance(text, str):
        return regexp.tokenize(text)
    return []

df['CDnew'] = df['CD'].apply(tokenize_text)

验证处理结果

可以用以下代码确认处理效果:

# 查看CD列数据类型和缺失值数量
print("CD列数据类型:", df['CD'].dtype)
print("CD列缺失值数量:", df['CD'].isna().sum())
# 查看分词结果示例
print(df[['CD', 'CDnew']].head())

内容的提问来源于stack exchange,提问作者Sanky Ach

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 16:25:09