含数组格式数据的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
相关产品推荐
相关产品推荐

