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

含分类列的Pandas DataFrame数值列转float64 dtype的高效最优方法

高效转换Pandas DataFrame中数值列的dtype

问题背景

现有混合分类列与数值列的Pandas DataFrame,示例如下:

import pandas as pd
import numpy as np

epi = pd.DataFrame({"Hospital": ["10702", "10835", "14303", "14303"],
                    "Service": ["Dermatology", "Dermatology", "Dermatology", "Rheumatology"],
                    "Product": ["X1", "X1", "X2", "X5"],
                    "202112": [20, 32, 54, 12],
                    "202201": [99, 0, 12, 14],
                    "202202": [102, 12, 43, 12]
                   })

需要将所有数值列(202112、202201、202202)转换为float64类型,由于数据集规模大、计算要求高,希望找到高效且符合Python风格的实现方式。当前已有如下方案,不确定是否为最优解:

cols = epi.select_dtypes(include=np.number).columns
epi[cols] = epi[cols].astype("float64")

解答

你的方案已经是最优且符合Python/Pandas风格的实现,原因如下:

  • select_dtypes(include=np.number)是Pandas专门设计的列筛选工具,能精准识别所有数值类型列(包括int、float等),无需手动指定列名,既避免了大规模数据集下列名枚举的繁琐,也能防止漏选或错选列
  • 直接对选中的列执行批量astype("float64")是Pandas的向量化操作,相比循环遍历列逐个转换的方式,效率提升显著,完全适配大规模数据集的计算需求

如果需要更精准地筛选仅整数类型的列(避免对已为float的列重复转换),可以将include参数改为int:

cols = epi.select_dtypes(include=int).columns
epi[cols] = epi[cols].astype("float64")

但原方案的np.number覆盖范围更广,能处理所有数值类型列,适用性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 15:35:23