Pandas代码报错TypeError:序列项3应为字符串,找到浮点数
解决Pandas中
TypeError: sequence item X: expected string, float found的问题 这个错误很典型,问题根源一目了然:你在使用', '.join()拼接分组后的Char_spcValue值时,该列里存在float类型的数据(可能是原始数据里的数值,或是未处理干净的缺失值),而join()方法只能拼接字符串,遇到非字符串类型就会抛出这个类型错误。
具体修复方案和代码调整
我们需要确保分组拼接前,Char_spcValue列的所有元素都是字符串类型,这里提供两种实用的处理方式:
方式一:提前转换列类型并处理缺失值
在读取df1后,直接将目标列转为字符串,同时把可能存在的缺失值替换成空字符串(或你需要的占位符):
import pandas as pd df1 = pd.read_csv("Book3.csv") # 转换为字符串类型,同时填充缺失值 df1['Char_spcValue'] = df1['Char_spcValue'].astype(str).fillna('') df2 = pd.read_csv("Book4.csv") df2 = df2.dropna(axis=0) # 此时拼接不会再出现类型冲突 g = df1.groupby('Attribute_spcName')['Char_spcValue'].apply(', '.join) df2['Char_spcValue'] = df2['Attribute_spcName'].map(g) df2.rename(columns={ 'Attribute_spcName': 'Attributes', 'Char_spcValue': 'Values'}, inplace=True) df2 = df2[['Attributes', 'Values']] df2.to_csv("AttributeHasValues.csv", index=False)
方式二:在拼接时动态转换元素类型
如果你不想提前修改df1的列结构,可以在apply操作里直接把每个元素转成字符串后再拼接:
import pandas as pd df1 = pd.read_csv("Book3.csv") df2 = pd.read_csv("Book4.csv") df2 = df2.dropna(axis=0) # 先将分组内的每个元素转为字符串,再执行拼接 g = df1.groupby('Attribute_spcName')['Char_spcValue'].apply(lambda x: ', '.join(map(str, x))) df2['Char_spcValue'] = df2['Attribute_spcName'].map(g) df2.rename(columns={ 'Attribute_spcName': 'Attributes', 'Char_spcValue': 'Values'}, inplace=True) df2 = df2[['Attributes', 'Values']] df2.to_csv("AttributeHasValues.csv", index=False)
方案说明
- 第一种方式提前统一了数据类型,能从根源上避免后续的类型冲突,同时处理了缺失值,逻辑更直观。
- 第二种方式更灵活,适合不想改动原始数据列类型的场景,仅在拼接环节临时转换类型。
你可以根据自己的实际需求选择其中一种方案,两种方式都能完美解决这个类型错误。
内容的提问来源于stack exchange,提问作者sithara
相关产品推荐
相关产品推荐

