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

如何加速Pandas DataFrame十六进制转整数?旧版本兼容方案

解决旧版Pandas中十六进制字符串转整数的效率问题

首先得说清楚你为啥会遇到那个报错:你用df2.apply(int, base=16)的时候,Pandas的apply在DataFrame层面是把**整列(Series对象)**传给int函数,而int()根本处理不了Series,自然就报错了——哪怕列是object类型的字符串,也得针对每个元素来调用int才行。

针对旧版Pandas(无法直接用新版的一些优化API),这里有几个比你原来嵌套lambda更快的方案:

方案1:用列表推导式批量处理列(比嵌套map快)

列表推导式在Python里的执行效率比map+lambda要高不少,你可以对每一列单独处理:

for col in df.columns:
    df[col] = [int(x, 16) for x in df[col]]

如果担心列里混有非字符串值(旧版Pandas设dtype=str后偶尔会有疏漏),可以加个简单的类型判断:

for col in df.columns:
    df[col] = [int(x.strip(), 16) if isinstance(x, str) else x for x in df[col]]

方案2:用NumPy向量化函数提速

NumPy的向量化操作比纯Python循环更快,你可以用np.vectorize包装int函数,然后批量处理整个DataFrame:

import numpy as np

# 包装转换函数,提前指定输出类型减少开销
hex_to_int = np.vectorize(lambda x: int(x, 16), otypes=[np.int64])
df = df.apply(hex_to_int)

方案3:读取数据时直接转换(最优解)

如果你的DataFrame是从外部文件(比如CSV)读取的,最好在读取阶段就完成转换,避免后续全量处理。用pd.read_csv的converters参数,针对每一列指定转换逻辑:

# 先读取一行获取所有列名,再构造转换器字典
col_names = pd.read_csv('your_file.csv', nrows=0).columns
converters = {col: lambda x: int(x, 16) for col in col_names}
df = pd.read_csv('your_file.csv', converters=converters)

这种方式在读取时直接把十六进制字符串转成整数,后续不需要额外处理,是效率最高的做法。

为啥你原来的方法慢?

你用的df.apply(lambda x: x.astype(str).map(lambda x: int(x, base=16)))是两层lambda嵌套,而且astype(str)会对整个列做无意义的重复类型转换(哪怕已经是字符串),再加上map的额外调用开销,处理大型DataFrame时自然就慢了——上面的方案都避免了不必要的操作,用更高效的循环或向量化逻辑替代,速度会提升很多。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 08:08:11