含分类列的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
相关产品推荐
相关产品推荐

