将Dataframe转换为dict列表太慢[重复]

Posted

技术标签:

【中文标题】将Dataframe转换为dict列表太慢[重复]【英文标题】:convert Dataframe to list of dict too slow [duplicate] 【发布时间】:2017-02-21 02:44:08 【问题描述】:
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

我尝试了 2 种方法将 DataFrame 转换为 dict 列表。但两者都很慢,250 毫秒和 580 毫秒!这远远超过我从数据库查询的时间。不知道为什么要花这么多时间,毕竟操作内存比磁盘快。我预计这个时间是 10 毫秒。有什么办法可以实现吗?

【问题讨论】:

为什么不df.to_dict(orient='records') 我只能推测额外的时间来自循环:每次迭代的开销是您正在创建一个系列的事实以及每次迭代的to_dict 方法的开销。 @JohnGalt 我错误地忽略了你在another question 中的回答。 【参考方案1】:

我认为你需要to_dict 和参数orient='records'

print (df.to_dict(orient='records'))

【讨论】:

以上是关于将Dataframe转换为dict列表太慢[重复]的主要内容,如果未能解决你的问题,请参考以下文章

将dict列表转换为pandas中的行[重复]

将 DataFrame 转换为 dict [重复]

如何将Pandas中的非零条目转换为带有列表的dict?

如何将可变长度列表的 Pandas DataFrame 列(或系列)转换为固定宽度的 DataFrame [重复]

如何将熊猫中的一列列表转换为Python中唯一值的稀疏DataFrame [重复]

将字典转换为 CSV 文件 [重复]