我有一个熊猫数据框,我想从中获取信息并创建一个嵌套的字典供下游使用,但是,我还不太擅长使用熊猫,我可以寻求帮助!
我的数据框看起来像这样:
Sequence A_start A_stop B_start B_stop
0 sequence_1 1 25 26 100
1 sequence_2 1 31 32 201
2 sequence_3 1 27 28 231
3 sequence_4 1 39 40 191
我想将其写到字典中,使其具有以下形式:
d = {‘Sequnce: {(‘A_start’, ‘A_stop’) : [{'repeat_region':{'rpt_type':'long_terminal_repeat', 'note':"5'LTR"}}], ('B_start', 'B_stop): [{'misc_feature':{'gene': 'Gag', 'note': 'deletion of start codon'}}]}}
生成后如下所示:
{‘sequence_1’: {(‘1’, ‘25’) : [{'repeat_region':{'rpt_type':'long_terminal_repeat', 'note':"5'LTR"}}], (‘26’, '100’): [{'misc_feature':{'gene': 'Gag', 'note': 'deletion of start codon'}}]},
‘sequence_2’: {(‘1’, ‘31’) : [{'repeat_region':{'rpt_type':'long_terminal_repeat', 'note':"5'LTR"}}], ('32', '201’): [{'misc_feature':{'gene': 'Gag', 'note': 'deletion of start codon'}}]}, ...}
我认为列表理解可能是解决此问题的简便方法,但最终可能看起来过于复杂。到目前为止,这是我目前尚无法解决的问题。我不确定是否可以使用iteritems()或groupby()以外的方法来识别字典中条目的结构。任何帮助将不胜感激!
LTR_sub_features = [{'repeat_region':{'rpt_type':'long_terminal_repeat', 'note':"5'LTR"}}]
gag_sub_features = [{'misc_feature':{'gene': 'Gag', 'note': 'deletion of start codon'}}]
ltr_gag_dict = {
Sequence: {(A_start,A_end): LTR_sub_features, (B_start,B_end):gag_sub_features}
for Sequence, A_start, A_end, B_start, B_end in ltr_gag_df.groupby('Sequence')}
答案 0 :(得分:1)
您可以使用iterrows()随时更新字典:
iterrows()为每一行创建一个元组,其中第一个元素(即row [0])是该行的索引,第二个元素是该行中所有值的pd.Serie对象。
<input>
A_start A_end B_start B_end
sequence_1 0.1 0.025 0.030303 0.001
sequence_2 0.2 0.050 0.060606 0.002
sequence_3 0.3 0.075 0.090909 0.003
sequence_4 0.4 0.100 0.121212 0.004
A_value = 'some value'
B_value = 'other value'
d = dict()
for row in df.iterrows():
d[row[0]] = {(row[1]['A_start'], row[1]['A_end']): A_value, (row[1]['B_start'], row[1]['B_end']): B_value}
<output>
{'sequence_1': {(0.10000000000000001, 0.025000000000000001): 'some value', (0.030303030303030304, 0.001): 'other value'}}