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

DataFrame数据清洗:如何将Set(float)类型列转为float/int?

DataFrame类型转换报错解决方案

报错根源

目标列(irs_pop、latitude、longitude、fips)中存在集合(set)类型数据,同时部分列混合了float值,导致直接类型转换失败。

各报错原因

  1. float() argument must be a string or a real number, not 'set':astype无法直接将集合类型转为数值类型
  2. sequence item 0: expected str instance, float found:','.join(x)仅支持字符串元素拼接,但集合内是float值
  3. int() argument must be a string, a bytes-like object or a real number, not 'set':集合类型无法直接转为int类型

解决步骤

1. 排查数据异常

先查看目标列的数据类型和样本值,确认异常数据形态:

# 查看列数据类型
print(mask[['irs_pop', 'latitude', 'longitude', 'fips']].dtypes)
# 查看前10行样本
print(mask[['irs_pop', 'latitude', 'longitude', 'fips']].head(10))

2. 清洗集合类型数据

定义通用清洗函数,将集合转为可处理的数值/字符串,空集合转为NaN:

import numpy as np

def clean_set_value(x):
    if isinstance(x, set):
        if not x:
            return np.nan
        x_list = list(x)
        # 集合内是数值则取第一个元素,是字符串则拼接
        return x_list[0] if isinstance(x_list[0], (int, float)) else ','.join(x_list)
    return x

# 应用到所有目标列
cols_to_clean = ['irs_pop', 'latitude', 'longitude', 'fips']
for col in cols_to_clean:
    mask[col] = mask[col].apply(clean_set_value)

3. 处理缺失值并转换类型

根据列的业务含义填充缺失值,再转换类型:

# irs_pop(人口数):用均值填充后转int
mask['irs_pop'] = mask['irs_pop'].fillna(mask['irs_pop'].mean()).astype('int64')
# latitude/longitude(经纬度):用均值填充后转float
mask['latitude'] = mask['latitude'].fillna(mask['latitude'].mean()).astype('float64')
mask['longitude'] = mask['longitude'].fillna(mask['longitude'].mean()).astype('float64')
# fips(地区编码):用众数填充后转int(或直接删除缺失行)
mask['fips'] = mask['fips'].fillna(mask['fips'].mode()[0]).astype('int64')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 03:45:37