我需要在非常大的数据帧(1000万x 70)上进行迭代(无法进行矢量操作)。 df.iterrows并使用df.loc [i,col]直接访问数据框太慢了。在过去,我首先将数据框转换为字典字典,这使我可以非常快速地进行迭代。但是,此方法占用大量内存,因此对于我当前的数据不再可行。
我需要牺牲一些查找速度来节省内存。做这个的最好方式是什么?将我的数据框变成行系列{index:Series}的字典有效吗?
答案 0 :(得分:0)
您的意思是这样的吗?
In [1112]: pd.DataFrame(df.reset_index().to_dict(orient='records'))
Out[1112]:
index id block check
0 0 6 25 yes
1 1 6 32 no
2 2 9 18 yes
3 3 12 17 no
4 4 15 23 yes
5 5 15 11 yes
6 6 15 15 yes
In [1113]: df.reset_index().to_dict(orient='records')
Out[1113]:
[{'index': 0, 'id': 6, 'block': 25, 'check': 'yes'},
{'index': 1, 'id': 6, 'block': 32, 'check': 'no'},
{'index': 2, 'id': 9, 'block': 18, 'check': 'yes'},
{'index': 3, 'id': 12, 'block': 17, 'check': 'no'},
{'index': 4, 'id': 15, 'block': 23, 'check': 'yes'},
{'index': 5, 'id': 15, 'block': 11, 'check': 'yes'},
{'index': 6, 'id': 15, 'block': 15, 'check': 'yes'}]
答案 1 :(得分:0)
您可以执行此操作(感谢@oppressionslayer作为示例df):
df
id block check
0 6 25 yes
1 6 32 no
2 9 18 yes
3 12 17 no
4 15 23 yes
5 15 11 yes
6 15 15 yes
df.to_dict('index')
输出:
{0: {'id': 6, 'block': 25, 'check': 'yes'}, 1: {'id': 6, 'block': 32, 'check': 'no'}, 2: {'id': 9, 'block': 18, 'check': 'yes'}, 3: {'id': 12, 'block': 17, 'check': 'no'}, 4: {'id': 15, 'block': 23, 'check': 'yes'}, 5: {'id': 15, 'block': 11, 'check': 'yes'}, 6: {'id': 15, 'block': 15, 'check': 'yes'}}
如果您(出于某种原因)特别希望它为{index:series}
,则可以执行此操作,可以通过相同的方式(即df_name[i][col]
)进行访问
df.T.to_dict('series')