我有多个帧,可从中检测对象并将检测到的数据写入csv。我想将多行数据转换为单个单元格
我制作了用于对象检测的脚本,并将检测到的输出写入了csv文件。现在我要修改相同的内容
objects = []
z = 0
sno=0
with open(out+'/metadata.csv','a') as csv_file:
fieldnames = ['Sr_No','File_Name', 'Object_Detected','Probability']
#writer = csv.writer(csv_file)
file_is_empty = os.stat(out+'/metadata.csv').st_size == 0
writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
if file_is_empty:
writer.writeheader()
print(Image_Name)
for index, value in enumerate(classes[0]):
sno=sno+1
object_dict = {}
#writer.writerow([Image_Name])
if scores[0, index] > threshold:
object_dict[(category_index.get(value)).get('name')] = scores[0, index]
objects.append(object_dict)
while (z<len(objects)):
writer.writerow({'Sr_No':sno,'File_Name':Image_Name,'Object_Detected':list(objects[z].keys())[0],'Probability':list(objects[z].values())[0]})
print((objects[z]))
z=z+1
# writer.writerow(objects)
实际输出
Sr_No File_Name Object_Detected Probability
1 tiger_23sec_f0.jpg tiger 0.9975079
2 tiger_23sec_f0.jpg vehicle 0.90277094
1 tiger_23sec_f1.jpg tiger 0.9964898
2 tiger_23sec_f1.jpg vehicle 0.9105579
所需的输出
Sr_No File_Name Object_Detected Probability
1 tiger_23sec_f0.jpg tiger,vehicle 0.9975079,0.90277094
2 tiger_23sec_f1.jpg tiger,vehicle 0.9964898,0.9105579
答案 0 :(得分:0)
我认为这可能是您想要的。
def group_concat_rows(df):
grouped = df.groupby('File_Name').apply(lambda x: x.apply(lambda x: ','.join(x.apply(str))))
return grouped.drop('File_Name', axis=1)
这确实不是写的好方法,但是我找不到更优雅的东西。
示例:
df
File_Name Object_Detected Probability
Sr_No
1 tiger_23sec_f0.jpg tiger 0.997508
2 tiger_23sec_f0.jpg vehicle 0.902771
1 tiger_23sec_f1.jpg tiger 0.996490
2 tiger_23sec_f1.jpg vehicle 0.910558
group_concat_rows(df)
Object_Detected Probability
File_Name
tiger_23sec_f0.jpg tiger,vehicle 0.9975079,0.90277094
tiger_23sec_f1.jpg tiger,vehicle 0.9964898,0.9105579
我认为您的键是File_Name
,而我忽略了Sr_No
,因为这两个列从您的输出到您的输入是不一致的,因此如果这不是您想要的,您可能想澄清一下问题正在寻找。