添加新行并在特定条件下复制单元格的值

时间:2017-06-04 22:45:26

标签: python csv pandas dataframe

我有一个使用pandas进行处理的csv文件。

id                                    raw_value     manual_raw_value
00219b14-37d1-42b2-95e8-65fe2a94b7a5    6,35        6,35
402048fd-868d-446a-8468-07a57f5386bf    11,68        11,68
33405269-c273-4c13-83d4-a973c42b72eb    VOTRE        VOTRE
8727fae7-4427-4285-945b-61c8a97b0017    AVELARVRO   AVELARVRO
006d9acb-9fed-44cd-8cc0-3f0710380484    2292        2292
9cf97fc4-d79b-4125-85d2-7dabc056caa3    questions.  questions.
6f63010b-2ccc-4e7a-bfe6-aab1dfc65ea3    nb            nb
a76d4f54-5036-4212-ab5a-921724c05910    tes          les
75d8b257-9bc3-431b-9bf6-1cc64c647292    937,99     937,99
4f6c38e9-6500-4172-a472-ba8532db05d2    à           à
229a883a-5e46-4c16-a74c-22936b6bb491    et         et
47293ec7-c2d5-4312-94a2-1bc963069096    TTC        TTC
d6841ca2-8dec-416f-ad20-3ce2da8d3e27    1          1
d7c152ed-4718-4430-9b54-b8289af78cb8    620       620
f8771e48-c17d-45c9-9f08-1e512197e998    Echéance    Echéance
fa821937-5f98-4249-abcf-f662a693c2b0    vos        vos
417a087a-3948-46aa-bfdf-27cf6c011d5c    ROB21     ROB21
f93c4e8c-b803-4501-bbee-67860c1ad065    Pièce     Pièce
2fb756fe-596b-4ed5-86f0-a9cb26e7098c    AGRIAL     AGRIAL
38dd4cde-ed72-4d07-be87-ee54cdb3eb5f    désignation désignation
66f395d7-aeb1-4ec9-a38a-d59a57244c5e    des         des
1858c031-488a-4f8c-9f51-76e7dc30648b    taux       taux
af853348-6212-4f58-9ba1-6a8d9a14e033    13s          13s
372c9afa-0f3d-4514-b9e3-6c0516d16f9c    2            2
918d3724-a739-4cd4-b4dd-68078d0398da    par         par
4cac4573-6d98-453a-82b3-61d2619af96c    le           le
d8a303ca-701c-441b-9697-649358d0fe9e    mois,       mois,
f5ff6420-bd55-43c7-a5f4-1f10828daa7e    32           32
ca48d1f7-333f-4af4-8654-892414cad579    21/07/2016  21/07/2016
a78daadd-7194-4e27-820f-ed97a6cfd109    FR           FR

现在,我想添加与id column相关的新行,如下所示: 每个id l都有一组ids。我们以Fpr实例为例first id

00219b14-37d1-42b2-95e8-65fe2a94b7a5 

这是id是图像的名称:

00219b14-37d1-42b2-95e8-65fe2a94b7a5.png

然后我有以下相同图像的id变体: 00219b14-37d1-42b2-95e8-65fe2a94b7a5 _blur。PNG 00219b14-37d1-42b2-95e8-65fe2a94b7a5 _noise。PNG 00219b14-37d1-42b2-95e8-65fe2a94b7a5 _sharpen。PNG 00219b14-37d1-42b2-95e8-65fe2a94b7a5 _affine。PNG

所有我想做的事 是通过将manual raw value设置为原始id来将这些图像的ID添加到csv文件中,然后获取以下内容

例如第一个id

id                                        raw_value     manual_raw_value
00219b14-37d1-42b2-95e8-65fe2a94b7a5          6,35        6,35
00219b14-37d1-42b2-95e8-65fe2a94b7a5`_blur`               6,35
00219b14-37d1-42b2-95e8-65fe2a94b7a5`_noise`              6,35 
00219b14-37d1-42b2-95e8-65fe2a94b7a5`_sharpen`            6,35 
00219b14-37d1-42b2-95e8-65fe2a94b7a5`_affine`             6,35

我想到了这个解决方案

import glob
import os
path="/home/images/"
os.chdir(path)
images=glog.glob("*.png")
id_img,variant_img = set([x.rsplit('.', 1)[0].rsplit('_') for x in images_name_valid])
for img in id_img:
   if (df_valid.id == img):
       value = df_valid.loc[df_valid.id == img, 'manual_raw_value'].item()
       # here l need to add rows and associate them the `value`


       00219b14-37d1-42b2-95e8-65fe2a94b7a5_blur
       00219b14-37d1-42b2-95e8-65fe2a94b7a5_noise
       00219b14-37d1-42b2-95e8-65fe2a94b7a5_sharpen
       00219b14-37d1-42b2-95e8-65fe2a94b7a5_affine

谢谢

1 个答案:

答案 0 :(得分:1)

我认为您需要使用自定义功能applyaxis=1展开DataFramelist,最后一次使用concatreindex_axis:< / p>

tech = ['blur', 'noise', 'sharpen', 'affine']
df = pd.read_csv('data.csv')
print (df)
                                     id    ocr raw_value manual_raw_value
0  00219b14-37d1-42b2-95e8-65fe2a94b7a5  ABBYY      6,35             6,35
1  402048fd-868d-446a-8468-07a57f5386bf  ABBYY     11,68            11,68
2  33405269-c273-4c13-83d4-a973c42b72eb  ABBYY     VOTRE            VOTRE

dfs = []
def f(x):
    df = pd.DataFrame({'id':[x['id'] + '_' + t for t in tech],
                       'ocr':x['ocr'],
                       'manual_raw_value':x['manual_raw_value'],
                       'raw_value':''})
    #print (df)
    dfs.append(df)

df.apply(f, axis=1)

df1 = pd.concat(dfs)
#print (df1)

df2 = pd.concat([df, df1], ignore_index=True).reindex_axis(df.columns, axis=1)
print (df2)
                                              id    ocr raw_value  \
0           00219b14-37d1-42b2-95e8-65fe2a94b7a5  ABBYY      6,35   
1           402048fd-868d-446a-8468-07a57f5386bf  ABBYY     11,68   
2           33405269-c273-4c13-83d4-a973c42b72eb  ABBYY     VOTRE   
3      00219b14-37d1-42b2-95e8-65fe2a94b7a5_blur  ABBYY             
4     00219b14-37d1-42b2-95e8-65fe2a94b7a5_noise  ABBYY             
5   00219b14-37d1-42b2-95e8-65fe2a94b7a5_sharpen  ABBYY             
6    00219b14-37d1-42b2-95e8-65fe2a94b7a5_affine  ABBYY             
7      402048fd-868d-446a-8468-07a57f5386bf_blur  ABBYY             
8     402048fd-868d-446a-8468-07a57f5386bf_noise  ABBYY             
9   402048fd-868d-446a-8468-07a57f5386bf_sharpen  ABBYY             
10   402048fd-868d-446a-8468-07a57f5386bf_affine  ABBYY             
11     33405269-c273-4c13-83d4-a973c42b72eb_blur  ABBYY             
12    33405269-c273-4c13-83d4-a973c42b72eb_noise  ABBYY             
13  33405269-c273-4c13-83d4-a973c42b72eb_sharpen  ABBYY             
14   33405269-c273-4c13-83d4-a973c42b72eb_affine  ABBYY             

   manual_raw_value  
0              6,35  
1             11,68  
2             VOTRE  
3              6,35  
4              6,35  
5              6,35  
6              6,35  
7             11,68  
8             11,68  
9             11,68  
10            11,68  
11            VOTRE  
12            VOTRE  
13            VOTRE  
14            VOTRE