DataFrame指定列转为int后转列表仍为float的问题求助
问题解决:DataFrame转列表后最后一列仍为浮点数的问题
问题原因
你遇到的问题源于DataFrame的values属性会将整个数据集转换为统一的numpy数组类型。由于前两列是float类型,numpy会自动把整个数组的 dtype 统一为float64——哪怕你已经将最后一列转为int64,最终也会被强制转为浮点数,所以tolist()后还是显示0.0、1.0这类格式。
解决方案
以下几种方法可以保留各列的原始数据类型,让最后一列在列表中显示为整数:
方法1:使用apply逐行转换
利用apply按行处理,每行元素会保留对应列的数据类型:
# 逐行转换为列表,保留各列类型 data_to_list = data.apply(lambda row: row.tolist(), axis=1).tolist()
方法2:用itertuples迭代构建列表
itertuples返回每行的元组,会保留各列原始类型,再转为列表即可:
# 迭代每行(排除索引),转为列表 data_to_list = [list(row) for row in data.itertuples(index=False)]
方法3:指定object类型转numpy数组
通过to_numpy指定dtype=object,允许数组容纳不同类型元素,再转列表:
# 转为object类型数组后转列表 data_to_list = data.to_numpy(dtype=object).tolist()
验证效果
用你的示例数据测试后,转换后的列表会变成:
[[1.53, 3.13, 0], [0.58, 2.83, 0], ... [2.56, 0.16, 1]]
内容的提问来源于stack exchange,提问作者mantics
相关产品推荐
相关产品推荐

