Python 将dataframe转换为行序列的字典
我需要在一个非常大的数据帧(1000万x 70)上迭代(向量操作不可能)。使用df.loc[i,col]直接访问数据帧太慢了。在过去,我会首先将dataframe转换为字典字典,它允许我快速迭代。然而,这种方法占用了大量内存,对于我当前的数据不再可行Python 将dataframe转换为行序列的字典,python,pandas,dataframe,dictionary,iteration,Python,Pandas,Dataframe,Dictionary,Iteration,我需要在一个非常大的数据帧(1000万x 70)上迭代(向量操作不可能)。使用df.loc[i,col]直接访问数据帧太慢了。在过去,我会首先将dataframe转换为字典字典,它允许我快速迭代。然而,这种方法占用了大量内存,对于我当前的数据不再可行 我需要牺牲一些查找速度来节省内存。最好的方法是什么?将我的数据帧转换为行序列{index:series}的字典是否有效?您的意思是: In [1112]: pd.DataFrame(df.reset_index().to_dict(orient='
我需要牺牲一些查找速度来节省内存。最好的方法是什么?将我的数据帧转换为行序列{index:series}的字典是否有效?您的意思是:
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'}]
您可以这样做(感谢@pressurationslayer提供的示例df):
输出:
{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]
)
有什么特别的原因使您希望它们作为一个系列而不是一个dict或命名元组吗?您能提供示例输出/inpu吗?我尝试了一个基于我认为您所寻找的内容的答案。将行转换为系列几乎肯定是一个坏主意。我们能得到更多的上下文吗?你的数据是什么样子的?我给这个问题添加了一些上下文。要点是,我的口述占用了太多的内存。
{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'}}
df.T.to_dict('series')