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

含数组格式数据的DataFrame字符截断报错问题求助

解决DataFrame混合列表/字符串列处理时的TypeError问题

问题核心是你的列中混合了列表和字符串类型元素:使用str.split()时,非字符串类型(比如列表)会被转为NaN(float类型),后续apply尝试迭代这个float对象时就会抛出TypeError: 'float' object is not iterable。

解决方案步骤

  • 统一元素类型:先将列表类型的元素提取内部字符串,并清理多余引号,确保所有元素都是纯字符串格式。
  • 按顺序去重:保留单词的出现顺序并去重,和你原逻辑一致。
  • 截取前10字符:完成格式转换后再执行截取操作。

完整代码

import pandas as pd
from collections import OrderedDict

df = pd.DataFrame({
    'column': [
        ['"PYTHON R JAVA PYTHON"'], 
        'PYTHON R JAVA PYTHON C DSS', 
        'Dss', 
        'Python R DSS', 
        'PYTHON'
    ]
})

# 统一转换为字符串,处理列表元素并清理引号
df['column'] = df['column'].apply(lambda x: x[0].strip('"') if isinstance(x, list) else x)

# 按顺序去重单词
df['column'] = (df['column'].str.split()
                            .apply(lambda x: OrderedDict.fromkeys(x).keys())
                            .str.join(' '))

# 截取前10个字符
df['column'] = df['column'].str[:10]

print(df)

简化优化(Python 3.7+)

如果你的Python版本是3.7及以上,普通字典默认保持插入顺序,可省去OrderedDict的导入,简化去重步骤:

# 替换去重代码为:
df['column'] = df['column'].apply(lambda s: ' '.join(dict.fromkeys(s.split()).keys()))

最终输出

column
0  PYTHON R J
1  PYTHON R J
2         Dss
3  Python R D
4       PYTHON

内容的提问来源于stack exchange,提问作者Python Dev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 12:55:18