Python 将数据帧转换为dict列表太慢
我尝试了两种方法将数据帧转换为dict列表。但这两种方法都非常慢,250毫秒和580毫秒!这远远超过了我从数据库查询的时间。我不知道为什么要花这么多时间,毕竟,操作内存比磁盘快。我预计这一时间是10毫秒。有什么办法可以实现吗?我想您需要参数Python 将数据帧转换为dict列表太慢,python,pandas,optimization,Python,Pandas,Optimization,我尝试了两种方法将数据帧转换为dict列表。但这两种方法都非常慢,250毫秒和580毫秒!这远远超过了我从数据库查询的时间。我不知道为什么要花这么多时间,毕竟,操作内存比磁盘快。我预计这一时间是10毫秒。有什么办法可以实现吗?我想您需要参数orient='records': from pandas import DataFrame import time data = [] for i in range(3000): data.append(['SH601318', 'abcdef',
orient='records'
:
from pandas import DataFrame
import time
data = []
for i in range(3000):
data.append(['SH601318', 'abcdef', 0.0001215, 0.000215, 0.125, 0.243])
df = DataFrame(data)
df.columns = ['symbol', 'name', 'total_ratio', 'outstanding_ratio', 'avg_total_ratio', 'avg_outstanding_ratio']
t = time.time()
result = [{
'symbol': df.at[i, 'symbol'],
'name': df.at[i, 'name'],
'total_ratio': df.at[i, 'total_ratio'],
'outstanding_ratio': df.at[i, 'outstanding_ratio'],
'avg_total_ratio': df.at[i, 'avg_total_ratio'],
'avg_outstanding_ratio': df.at[i, 'avg_outstanding_ratio'],
} for i in range(len(df))]
print '%.2f seconds' % (time.time() - t)
# 0.25 seconds
t = time.time()
result = [df.iloc[i].to_dict() for i in range(len(df))]
print '%.2f seconds' % (time.time() - t)
# 0.58 seconds
为什么不
df.to_dict(orient='records')
?我只能猜测额外的时间来自循环:每次迭代的开销是您正在创建一个系列以及每次迭代的to_dict
方法的开销。@JohnGalt我错误地忽略了您的答案。
print (df.to_dict(orient='records'))