如何优化Python数组转Pandas DataFrame的转换速度?
提升Python数组转Pandas DataFrame速度的实用方法
碰到Python数组转Pandas DataFrame速度慢的问题?结合你给出的K线类数据结构(包含时间戳、字符串格式的数值字段),我分享几个亲测有效的提速技巧:
提前指定数据类型(dtype),避免自动推断
Pandas默认会逐个字段推断数据类型,尤其是处理大量字符串格式的数值时,这个推断过程会消耗很多时间。你可以提前给每一列指定明确的类型,直接跳过推断步骤:import pandas as pd # 先定义对应你的数据列名 columns = [ 'open_time', 'open', 'high', 'low', 'close', 'volume', 'close_time', 'quote_asset_volume', 'number_of_trades', 'taker_buy_base_asset_volume', 'taker_buy_quote_asset_volume', 'ignore' ] # 为每列指定精准的数据类型 dtype_map = { 'open_time': 'int64', 'open': 'float64', 'high': 'float64', 'low': 'float64', 'close': 'float64', 'volume': 'float64', 'close_time': 'int64', 'quote_asset_volume': 'float64', 'number_of_trades': 'int64', 'taker_buy_base_asset_volume': 'float64', 'taker_buy_quote_asset_volume': 'float64', 'ignore': 'int64' } # 直接传入类型参数构造DataFrame df = pd.DataFrame(your_array, columns=columns, dtype=dtype_map)先转成NumPy数组再构造DataFrame
Pandas对NumPy数组的处理效率远高于纯Python列表,尤其是数据量较大时。先把你的Python数组转成NumPy数组,再转成DataFrame能显著降低转换开销:import numpy as np import pandas as pd # 转成结构化NumPy数组(推荐,类型更精准) numpy_dtype = [ ('open_time', 'int64'), ('open', 'float64'), ('high', 'float64'), ('low', 'float64'), ('close', 'float64'), ('volume', 'float64'), ('close_time', 'int64'), ('quote_asset_volume', 'float64'), ('number_of_trades', 'int64'), ('taker_buy_base_asset_volume', 'float64'), ('taker_buy_quote_asset_volume', 'float64'), ('ignore', 'int64') ] # 将每行转为元组后生成结构化数组 numpy_array = np.array([tuple(row) for row in your_array], dtype=numpy_dtype) df = pd.DataFrame(numpy_array)使用
from_records方法替代直接构造
Pandas的DataFrame.from_records方法在处理结构化数据时,有时候会比直接用pd.DataFrame()构造函数更高效,你可以尝试替换:df = pd.DataFrame.from_records(your_array, columns=columns, dtype=dtype_map)绝对避免逐行添加数据
如果你之前是通过循环逐行将数据添加到DataFrame中(比如用df.append()或者loc),那这绝对是速度慢的元凶。一定要先把所有数据收集到一个大的Python数组/列表中,再一次性转成DataFrame,这是最基础也是最有效的优化原则。
总结一下:提前指定数据类型和先转成NumPy数组是提升大数组转换速度的核心技巧,这两个方法通常能让转换速度提升数倍甚至数十倍。
内容的提问来源于stack exchange,提问作者Siem
相关产品推荐
相关产品推荐

