我正在尝试创建一个字典,该字典将数据帧第一列的元素作为键,其余列作为值。我的数据框 test_df
在它的第一列中有图像的名称,其余的包含每个图像的分数(见下面的代码)。目标是创建一个包含键值对的变量,该键值对将图像名称(键)映射到标签(值)。
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:])}
我在字典方面没有很多经验,所以我很感激任何帮助。 提前致谢
答案 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.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'}
替代解决方案:
也可以通过参数read_csv
转换为index_col=0
中的索引:
test_df = pd.read_csv(file, header=None, index_col=0)
d = test_df.agg(list, axis=1).to_dict()