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

如何将含int/float/string的CSV数据转换为仅含string和float类型

问题场景

待处理CSV文件包含float、int、string三种数据类型,处理目标为仅保留string、float两类数据:仅将所有int类型内容转换为float类型,其余类型数据保持原样。
此前使用如下代码尝试全表类型转换:

df=df.astype(dtype=np.float64, copy=True, errors='raise')

代码运行报错原因:全局强制将所有数据转为np.float64时,表中存在的string类型内容无法完成浮点转换,触发类型错误。

解决方案

不要直接对全表执行统一的astype(np.float64)转换,按数据类型筛选后定向处理整数类型内容即可,根据数据规整程度选择对应方法:

  • 规整数据表(每列类型统一):按列类型筛选后批量转换
    先识别所有整数类型的列,仅对这类列执行浮点转换,原有字符串列、浮点列不做任何改动,代码如下:
import numpy as np
import pandas as pd

# 读入目标CSV文件
df = pd.read_csv("你的CSV文件本地路径.csv")

# 筛选所有整数类型的列,统一转为float64
int_columns = df.select_dtypes(include="int").columns
df[int_columns] = df[int_columns].astype(np.float64)

# 打印各列类型校验转换结果
print(df.dtypes)

注意:如果CSV读入时因为空值、列内存在混合值,导致整数列被自动识别为object类型,该方法会漏判,需使用下面的混合类型处理方案。

  • 非规整数据表(列内存在混合类型):逐元素判断类型后转换
    不按整列做类型强制,对表中每个元素单独判断:如果元素是int类型就转为float,字符串、原有浮点值直接保留,代码如下:
def int_to_float(element):
    if isinstance(element, int):
        return float(element)
    return element

# pandas版本低于2.1.0用applymap
df = df.applymap(int_to_float)

# pandas版本2.1.0及以上用map替换applymap
# df = df.map(int_to_float)
避坑提示

全表统一指定astype(np.float64)的逻辑会尝试将所有单元格内容转为浮点类型,遇到字符串内容必然抛出转换错误,无法满足保留字符串列的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:15:51