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

大型Pandas DataFrame列类型快速转换为float64的方法

快速将大尺寸Object类型DataFrame转换为float64的方法

问题背景

存在形状为(350000, 910)的Pandas DataFrame,所有910列均为object类型,存储内容为1.0、2.0这类小数值。使用常规的astype('float64')或astype(np.float64)转换时速度极慢,处理不到10%的列就耗时1小时,需要高效的转换方案。

优化方案

方案1:用pd.to_numeric批量处理

pd.to_numeric在字符串转数值场景下比astype更高效,结合apply批量处理所有列:

df[all_cols] = df[all_cols].apply(pd.to_numeric, downcast='float')
  • 说明:downcast='float'会自动选择更紧凑的浮点类型(如float32),若必须使用float64可移除该参数;紧凑类型能减少内存占用,间接提升转换速度。

方案2:转Numpy数组后重构DataFrame

利用Numpy底层C实现的批量转换能力,绕过Pandas逐列处理的开销:

# 将DataFrame转为numpy数组并转换类型
arr = df[all_cols].values.astype(np.float64)
# 用转换后的数组重构DataFrame
df[all_cols] = pd.DataFrame(arr, columns=all_cols, index=df.index)
  • 说明:这种方式的转换速度通常是常规astype的5-10倍以上,尤其适合超大尺寸数据集。

方案3:给astype加copy=False参数减少内存开销

若坚持使用astype,可通过copy=False避免额外内存复制,提升速度:

df[all_cols] = df[all_cols].astype('float64', copy=False)
  • 说明:该参数会尝试在原数据内存区域直接修改类型(若内存布局允许),减少内存占用和复制耗时。

测试验证

用提供的示例代码模拟场景测试(需先将数据转为object类型模拟真实情况):

import string
import pandas as pd
import numpy as np 

all_cols = [letter + str(x) for x in range(1, 36) for letter in string.ascii_uppercase]
# 生成测试数据并转为object类型
df = pd.DataFrame(np.random.randint(0, 5, size=(300_000, len(all_cols))), columns=all_cols).astype(str)

# 测试方案2的速度
%timeit arr = df.values.astype(np.float64); df_new = pd.DataFrame(arr, columns=all_cols, index=df.index)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 12:55:25