比较行csv中的上一个和下一个值

时间:2019-09-02 09:45:37

标签: python csv

我有一个CSV文件(.txt),其中包含来自CNN的检测结果:

CSV文件示例:

background: -webkit-linear-gradient(to bottom, rgba(255,255,255,0), rgba(255,255,255, 1));

坐标文件示例:

filename,type,confidence,xmin,ymin,xmax,ymax  
27cz1_SLRM_0, barrow,87, 128, 176, 176, 224  
27cz1_SLRM_101, barrow,80, 480, 400, 512, 432  
27cz1_SLRM_103, celtic_field,85, 0, 112, 96, 256  
27cz1_SLRM_103, celtic_field,80, 256, 384, 384, 544  
27cz1_SLRM_103, celtic_field,80, 160, 96, 304, 272  
27cz1_SLRM_103, barrow,85, 416, 160, 464, 208  
27cz1_SLRM_107, celtic_field,84, 96, 448, 224, 576  
27cz1_SLRM_107, barrow,94, 256, 432, 304, 480  
27cz1_SLRM_107, barrow,87, 128, 368, 176, 416  
27cz1_SLRM_107, barrow,84, 64, 304, 112, 352  
27cz1_SLRM_107, barrow,80, 64, 208, 96, 240  

为了减少误报的次数,我想对类27cz1_SLRM_0, 179927.5, 475140.0 27cz1_SLRM_101, 183062.5, 476565.0 27cz1_SLRM_103, 183632.5, 476565.0 27cz1_SLRM_107, 184772.5, 476565.0 进行所有单次检测。

在上面的示例中,应该保留来自celtic_field的{​​{1}}检测,但是应该删除来自celtic_field的{​​{1}}检测。

作为进一步处理的一部分,CSV作为字典打开,并变成27cz1_SLRM_103条目(见下文)。这工作正常,但我想包括以上内容。

celtic_field

2 个答案:

答案 0 :(得分:0)

尝试一下:

df['count']=df.groupby(['filename','type']).transform('count')['confidence']

df=df[~((df['count']==1)&(df['type']=='celtic_field'))]

print(df)

          filename           type  confidence  xmin  ymin  xmax  ymax    count
0     27cz1_SLRM_0         barrow          87   128   176   176     224      1
1   27cz1_SLRM_101         barrow          80   480   400   512     432      1
2   27cz1_SLRM_103   celtic_field          85     0   112    96     256      3
3   27cz1_SLRM_103   celtic_field          80   256   384   384     544      3
4   27cz1_SLRM_103   celtic_field          80   160    96   304     272      3
5   27cz1_SLRM_103         barrow          85   416   160   464     208      1
7   27cz1_SLRM_107         barrow          94   256   432   304     480      4
8   27cz1_SLRM_107         barrow          87   128   368   176     416      4
9   27cz1_SLRM_107         barrow          84    64   304   112     352      4
10  27cz1_SLRM_107         barrow          80    64   208    96     240      4

答案 1 :(得分:0)

在你们许多人(尤其是Billy Bonaros)的帮助下,我找到了一个可行的解决方案:

# remove loose celtic_fields
df = pd.read_csv(output_location)
df['count'] = df.groupby(['filename','type']).transform('count')['confidence']

for i,row in df.iterrows():
    if row['count']==1 and row['type']==' celtic_field':
        df.drop(i, inplace=True)

df.to_csv('...\csv.txt')

# open output file

output_file = csv.DictReader(open('...\csv.txt'))

非常感谢!