Để 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()?