как заменить определенные данные с помощью pandas python или excel

#python #pandas #dataframe #numpy

Вопрос:

У меня есть csv-файл данных, содержащий некоторые данные. В котором у меня есть некоторые данные в пределах точек с запятой. В этих точках с запятой есть некоторые конкретные идентификационные номера, и мне нужно заменить их конкретным названием местоположения.

Имеющиеся данные

Электрический коридор 24CFA4A-12L — GF

Замена данных в точках с запятой идентификационного номера

1;1;35;;1/2/1/37 24CFA4A;;;0;;;

Файлы с данными — https://gofile.io/d/bQDppz

Спасибо, если у кого-нибудь есть решение.

Данные для поиска идентификатора и замены

[![Основные данные, подлежащие замене после поиска идентификационного номера и замены на местоположение ][3]][3]

Комментарии:

1. Не могли бы вы отредактировать свой вопрос и поместить данные в текстовую форму (чтобы мы могли скопировать и вставить их)?

Ответ №1:

Предположим, у вас есть кадры данных:

 df1 = pd.read_excel("ID_list.xlsx", header=None)
df2 = pd.read_excel("location.xlsx", header=None)
 

df1:

                                   0
0   1;1;27;;1/2/1/29 25BAB3D;;;0;;;
1                  1;1;27;1;;;;0;;;
2   1;1;28;;1/2/1/30 290E6D2;;;0;;;
3                  1;1;28;1;;;;0;;;
4   1;1;29;;1/2/1/31 28BA737;;;0;;;
5                  1;1;29;1;;;;0;;;
6   1;1;30;;1/2/1/32 2717823;;;0;;;
7                  1;1;30;1;;;;0;;;
8   1;1;31;;1/2/1/33 254DEAA;;;0;;;
9                  1;1;31;1;;;;0;;;
10  1;1;32;;1/2/1/34 28AE041;;;0;;;
11                 1;1;32;1;;;;0;;;
12  1;1;33;;1/2/1/35 254DE82;;;0;;;
13                 1;1;33;1;;;;0;;;
14  1;1;34;;1/2/1/36 2539D70;;;0;;;
15                 1;1;34;1;;;;0;;;
16  1;1;35;;1/2/1/37 24CFA4A;;;0;;;
17                 1;1;35;1;;;;0;;;
18  1;1;36;;1/2/1/39 28F023E;;;0;;;
19                 1;1;36;1;;;;0;;;
20  1;1;37;;1/2/1/40 2717831;;;0;;;
21                 1;1;37;1;;;;0;;;
22  1;1;38;;1/2/1/41 2397D75;;;0;;;
23                 1;1;38;1;;;;0;;;
24  1;1;39;;1/2/1/42 287844C;;;0;;;
25                 1;1;39;1;;;;0;;;
26  1;1;40;;1/2/1/43 28784F0;;;0;;;
27                 1;1;40;1;;;;0;;;
28  1;1;41;;1/2/1/44 2865B67;;;0;;;
29                 1;1;41;1;;;;0;;;
30  1;1;42;;1/2/1/45 2865998;;;0;;;
31                 1;1;42;1;;;;0;;;
32  1;1;43;;1/2/1/46 287852F;;;0;;;
33                 1;1;43;1;;;;0;;;
34  1;1;44;;1/2/1/47 287AC43;;;0;;;
35                 1;1;44;1;;;;0;;;
36  1;1;45;;1/2/1/48 287ACF8;;;0;;;
37                 1;1;45;1;;;;0;;;
38  1;1;46;;1/2/1/49 2878586;;;0;;;
39                 1;1;46;1;;;;0;;;
40  1;1;47;;1/2/1/50 2878474;;;0;;;
41                 1;1;47;1;;;;0;;;
42  1;1;48;;1/2/1/51 2846315;;;0;;;
 

df2:

                          0            1
0     GF General Dining TC  254DEAA-02L
1     GF General Dining TC  2717823-26L
2     GF General Dining FC  28BA737-50L
3        GF Preparation FC  25BAB3D-10L
4        GF Preparation TC  290E6D2-01M
5   GF Hospital Kitchen FC  25BAB2F-10L
6   GF Hospital Kitchen TC  2906F5C-01M
7   GF Food Preparation FC  25F5723-10L
8   GF Food Preparation TC  29070D6-01M
9     GF KITCHEN Corridor   254DF5D-02L
 

Затем:

 df1 = df1[0].str.split(";", expand=True)

df1[4] = df1[4].apply(lambda x: v[-1] if (v := x.split()) else "")
df2[1] = df2[1].apply(lambda x: x.split("-")[0])
 

df1:

    0  1   2  3        4  5  6  7  8  9  10
0   1  1  27     25BAB3D        0         
1   1  1  27  1                 0         
2   1  1  28     290E6D2        0         
3   1  1  28  1                 0         
4   1  1  29     28BA737        0         
5   1  1  29  1                 0         
6   1  1  30     2717823        0         
7   1  1  30  1                 0         
8   1  1  31     254DEAA        0         
9   1  1  31  1                 0         
10  1  1  32     28AE041        0         
11  1  1  32  1                 0         
12  1  1  33     254DE82        0         
13  1  1  33  1                 0         
14  1  1  34     2539D70        0         
15  1  1  34  1                 0         
16  1  1  35     24CFA4A        0         
17  1  1  35  1                 0         
18  1  1  36     28F023E        0         
19  1  1  36  1                 0         
20  1  1  37     2717831        0         
21  1  1  37  1                 0         
22  1  1  38     2397D75        0         
23  1  1  38  1                 0         
24  1  1  39     287844C        0         
25  1  1  39  1                 0         
26  1  1  40     28784F0        0         
27  1  1  40  1                 0         
28  1  1  41     2865B67        0         
29  1  1  41  1                 0         
30  1  1  42     2865998        0         
31  1  1  42  1                 0         
32  1  1  43     287852F        0         
33  1  1  43  1                 0         
34  1  1  44     287AC43        0         
35  1  1  44  1                 0         
36  1  1  45     287ACF8        0         
37  1  1  45  1                 0         
38  1  1  46     2878586        0         
39  1  1  46  1                 0         
40  1  1  47     2878474        0         
41  1  1  47  1                 0         
42  1  1  48     2846315        0         
 

df2:

                          0        1
0     GF General Dining TC  254DEAA
1     GF General Dining TC  2717823
2     GF General Dining FC  28BA737
3        GF Preparation FC  25BAB3D
4        GF Preparation TC  290E6D2
5   GF Hospital Kitchen FC  25BAB2F
6   GF Hospital Kitchen TC  2906F5C
7   GF Food Preparation FC  25F5723
8   GF Food Preparation TC  29070D6
9     GF KITCHEN Corridor   254DF5D
 

Для замены значений:

 m = dict(zip(df2[1], df2[0]))
df1[4] = df1[4].replace(m)
 

df1:

    0  1   2  3                     4  5  6  7  8  9  10
0   1  1  27        GF Preparation FC        0         
1   1  1  27  1                              0         
2   1  1  28        GF Preparation TC        0         
3   1  1  28  1                              0         
4   1  1  29     GF General Dining FC        0         
5   1  1  29  1                              0         
6   1  1  30     GF General Dining TC        0         
7   1  1  30  1                              0         
8   1  1  31     GF General Dining TC        0         
9   1  1  31  1                              0         
10  1  1  32                  28AE041        0         
11  1  1  32  1                              0         
12  1  1  33                  254DE82        0         
13  1  1  33  1                              0         
14  1  1  34                  2539D70        0         
15  1  1  34  1                              0         
16  1  1  35                  24CFA4A        0         
17  1  1  35  1                              0         
18  1  1  36                  28F023E        0         
19  1  1  36  1                              0         
20  1  1  37                  2717831        0         
21  1  1  37  1                              0         
22  1  1  38                  2397D75        0         
23  1  1  38  1                              0         
24  1  1  39                  287844C        0         
25  1  1  39  1                              0         
26  1  1  40                  28784F0        0         
27  1  1  40  1                              0         
28  1  1  41                  2865B67        0         
29  1  1  41  1                              0         
30  1  1  42                  2865998        0         
31  1  1  42  1                              0         
32  1  1  43                  287852F        0         
33  1  1  43  1                              0         
34  1  1  44                  287AC43        0         
35  1  1  44  1                              0         
36  1  1  45                  287ACF8        0         
37  1  1  45  1                              0         
38  1  1  46                  2878586        0         
39  1  1  46  1                              0         
40  1  1  47                  2878474        0         
41  1  1  47  1                              0         
42  1  1  48                  2846315        0         
 

Комментарии:

1. После запуска кода он выдает синтаксическую ошибку

2. Файл «c:/Users/HKC/Music/ID location/replace.py», строка 8 df1[4] = df1[4].примените(лямбда x: v[-1], если (v := x.split()) иначе «») ^ Синтаксическая ошибка: недопустимый синтаксис

3. ( v := x.разделить()) иначе «»)