[英]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.