Python如何高效将pandas DataFrame中数字列批量转换为float类型
Pandas 数值列转换高效实现方案
你原来的逐行逐列遍历实现属于Python层循环,没有用到pandas底层C实现的向量化运算能力,因此数据量较大时性能会非常差。可以使用pandas内置的数值转换函数优化,性能可以提升几十到上百倍。
方案1:整列可转数字则统一转为float
如果需求是判断整列所有内容都为可转换的数字时,将整列转为float类型:
import pandas as pd # 仅处理object类型列,已为数值类型的列直接跳过,减少冗余计算 obj_columns = df.select_dtypes(include=['object']).columns for col in obj_columns: # 尝试转数值,无法转换的置为NaN,判断是否整列都可正常转数值 if pd.to_numeric(df[col], errors='coerce').notna().all(): df[col] = df[col].astype(float)
方案2:列中只要可转的内容都转为float
如果需求是仅转换列中可识别为数字的内容,非数字内容保留原值:
for col in df.columns: df[col] = pd.to_numeric(df[col], errors='ignore', downcast='float')
性能说明
上述两个方案都是基于pandas内置的向量化运算实现,底层为C语言执行,避免了Python层循环的高额开销,百万行级数据的处理耗时通常在秒级。
内容的提问来源于stack exchange,提问作者bballcoder
相关产品推荐
相关产品推荐

