Để sử dụng (tên nút với vị trí xy) tôi đã tìm thấy câu trả lời của @ user4179775 cho hữu ích / trực quan nhất:
import pandas as pd
df = pd.read_csv('glycolysis_nodes_xy.tsv', sep='\t')
df.head()
nodes x y
0 c00033 146 958
1 c00031 601 195
...
xy_dict_list=dict([(i,[a,b]) for i, a,b in zip(df.nodes, df.x,df.y)])
xy_dict_list
{'c00022': [483, 868],
'c00024': [146, 868],
... }
xy_dict_tuples=dict([(i,(a,b)) for i, a,b in zip(df.nodes, df.x,df.y)])
xy_dict_tuples
{'c00022': (483, 868),
'c00024': (146, 868),
... }
Phụ lục
Sau đó tôi trở lại vấn đề này, cho công việc khác, nhưng có liên quan. Đây là một cách tiếp cận phản ánh chặt chẽ hơn câu trả lời được chấp nhận [xuất sắc].
node_df = pd.read_csv('node_prop-glycolysis_tca-from_pg.tsv', sep='\t')
node_df.head()
node kegg_id kegg_cid name wt vis
0 22 22 c00022 pyruvate 1 1
1 24 24 c00024 acetyl-CoA 1 1
...
Chuyển đổi khung dữ liệu Pandas thành [danh sách], {dict}, {dict của {dict}}, ...
Mỗi câu trả lời được chấp nhận:
node_df.set_index('kegg_cid').T.to_dict('list')
{'c00022': [22, 22, 'pyruvate', 1, 1],
'c00024': [24, 24, 'acetyl-CoA', 1, 1],
... }
node_df.set_index('kegg_cid').T.to_dict('dict')
{'c00022': {'kegg_id': 22, 'name': 'pyruvate', 'node': 22, 'vis': 1, 'wt': 1},
'c00024': {'kegg_id': 24, 'name': 'acetyl-CoA', 'node': 24, 'vis': 1, 'wt': 1},
... }
Trong trường hợp của tôi, tôi muốn làm điều tương tự nhưng với các cột được chọn từ khung dữ liệu Pandas, vì vậy tôi cần phải cắt các cột. Có hai cách tiếp cận.
- Trực tiếp:
(xem: Chuyển đổi gấu trúc thành từ điển xác định các cột được sử dụng cho các giá trị chính )
node_df.set_index('kegg_cid')[['name', 'wt', 'vis']].T.to_dict('dict')
{'c00022': {'name': 'pyruvate', 'vis': 1, 'wt': 1},
'c00024': {'name': 'acetyl-CoA', 'vis': 1, 'wt': 1},
... }
- "Gián tiếp:" trước tiên, hãy cắt các cột / dữ liệu mong muốn từ khung dữ liệu Pandas (một lần nữa, hai cách tiếp cận),
node_df_sliced = node_df[['kegg_cid', 'name', 'wt', 'vis']]
hoặc là
node_df_sliced2 = node_df.loc[:, ['kegg_cid', 'name', 'wt', 'vis']]
sau đó có thể được sử dụng để tạo ra một từ điển từ điển
node_df_sliced.set_index('kegg_cid').T.to_dict('dict')
{'c00022': {'name': 'pyruvate', 'vis': 1, 'wt': 1},
'c00024': {'name': 'acetyl-CoA', 'vis': 1, 'wt': 1},
... }
Dataframe.to_dict()
?