Pandas将数据帧放入稀疏的字典词典中

时间:2016-04-12 23:43:38

标签: python dictionary pandas

如何将pandas dataFrame转换为字典的稀疏字典,其中仅显示某些截止的索引。在下面的玩具示例中,我只想要其值为>的每列的索引。 0

import pandas as pd

table1 = [['gene_a', -1 , 1], ['gene_b', 1, 1],['gene_c', 0, -1]]
df1 = pd.DataFrame(table)
df1.columns = ['gene','cell_1', 'cell_2']
df1 = df1.set_index('gene')
dfasdict = df1.to_dict(orient='dict')

这给出了:

dfasdict = {'cell_1': {'gene_a': -1, 'gene_b': 0, 'gene_c': 0}, 'cell_2': {'gene_a': 1, 'gene_b': -1, 'gene_c': -1}}

但是所需的输出是一个稀疏字典,其中只显示小于零的值:

desired = {'cell_1': {'gene_a': -1}, 'cell_2': {'gene_b': -1, 'gene_c': -1}}

我可以在创建之后进行一些处理以更改dfasdict字典,但我想在同一步骤中进行转换,因为之后的处理涉及迭代非常大的字典。这可能在熊猫中完成吗?

2 个答案:

答案 0 :(得分:2)

此结果使用字典理解来生成结果。对于Error: Exit with code 1 due to network error: TimeoutError at Socket.<anonymous> (/srv/exporter/utils/wkhtmltopdf.js:117:19) at Socket.g (events.js:260:16) at emitOne (events.js:77:13) at Socket.emit (events.js:169:7) at readableAddChunk (_stream_readable.js:146:16) at Socket.Readable.push (_stream_readable.js:110:10) at Pipe.onread (net.js:523:20) cell_1中的每一列,它会找到小于(cell_2)零的列并将结果转换为字典。

lt

为了帮助理解这里发生了什么:

>>> {col: df1.loc[df1[col].lt(0), col].to_dict() for col in ['cell_1', 'cell_2']}
{'cell_1': {'gene_a': -1}, 'cell_2': {'gene_c': -1}}

答案 1 :(得分:1)

删除代码的最后一行并添加此代码。

from pandas import compat

def to_dict_custom(data):
    return dict((k, v[v<0].to_dict()) for k, v in compat.iteritems(data))

dfasdict = to_dict_custom(df1)
print dfasdict

产生,

{'cell_2': {'gene_c': -1.0}, 'cell_1': {'gene_a': -1.0}}
here启发的第3行和第4行请检查。