繁体   English   中英

从 dataframe 创建一个字典,第一列作为键,其余作为值

[英]Create a Dictionary from dataframe with first column as keys and remaining as values

我正在尝试创建一个字典,其中包含 dataframe 第一列的元素作为键,其余列作为值。 我的 dataframe test_df在其第一列中有图像的名称,并且 rest 包含每个图像的分数(参见下面的代码)。 目标是创建一个包含键值对的变量,它将图像名称(键)映射到标签(值)。

print(test_df)

    1.jpg   0.21337     0.83585 0.13824     0.16486
0   101.jpg 0.087876    0.86553 0.038267    0.046497
1   106.jpg 0.231350    0.73344 0.038267    0.164860
2   107.jpg 0.406980    0.56384 0.862520    0.164860
3   109.jpg 0.257200    0.25579 0.686770    0.046497

所以我想做的是这样的:

dict = {'1.jpg': 0.21337 0.83585 0.13824 0.16486
        '101.jpg': 0.087876 0.86553 0.038267 0.046497....
        '106.jpg':.......etc}

但我得到的最接近的是

print(test_df.transpose().to_dict())

 {0: {'1.jpg': '101.jpg', '0.21337': 0.087876, '0.83585': 0.8655299999999999, '0.13824': 0.038267, '0.16486': 0.046497000000000004}, 1: {'1.jpg': '106.jpg', '0.21337': 0.23135, '0.83585': 0.73344, '0.13824': 0.038267, '0.16486': 0.16485999999999998},...

我也试过这个,但效果不好

dict = {k: v for k, v in zip(test_df.iloc[:,0], test_df.iloc[0,1:])}

我在字典方面没有很多经验,所以我会很感激任何帮助。 先感谢您

首先添加header=None以避免将第一行数据转换为列名。

test_df = pd.read_csv(file, header=None)

print (test_df)
         0         1        2         3         4
0    1.jpg  0.213370  0.83585  0.138240  0.164860
1  101.jpg  0.087876  0.86553  0.038267  0.046497
2  106.jpg  0.231350  0.73344  0.038267  0.164860
3  107.jpg  0.406980  0.56384  0.862520  0.164860
4  109.jpg  0.257200  0.25579  0.686770  0.046497

我认为您需要 DataFrame.set_index 的列表DataFrame.set_index才能将第一列转换为索引,然后将DataFrame.agg用于列表:

d = test_df.set_index(0).agg(list, axis=1).to_dict()

print (d)
{'1.jpg': [0.21337, 0.83585, 0.13824, 0.16486], 
 '101.jpg': [0.087876, 0.86553, 0.038267, 0.046497],
 '106.jpg': [0.23135, 0.73344, 0.038267, 0.16486], 
 '107.jpg': [0.40698, 0.56384, 0.86252, 0.16486],
 '109.jpg': [0.2572, 0.25579, 0.68677, 0.046497]}

或者,如果需要加入号码,请使用:

d1 = test_df.set_index(0).astype(str).agg(' '.join, axis=1).to_dict()

print (d1)
{'1.jpg': '0.21337 0.83585 0.13824 0.16486', 
 '101.jpg': '0.087876 0.86553 0.038267 0.046497',
 '106.jpg': '0.23135 0.73344 0.038267 0.16486', 
 '107.jpg': '0.40698 0.56384 0.86252 0.16486', 
 '109.jpg': '0.2572 0.25579 0.68677 0.046497'}

替代解决方案:

也可以通过参数index_col=0转换为read_csv中的索引:

test_df = pd.read_csv(file, header=None, index_col=0)
d = test_df.agg(list, axis=1).to_dict()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM