将多行数据转换为单个单元格

时间:2019-05-14 17:05:33

标签: python csv

我有多个帧,可从中检测对象并将检测到的数据写入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

1 个答案:

答案 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,因为这两个列从您的输出到您的输入是不一致的,因此如果这不是您想要的,您可能想澄清一下问题正在寻找。