В Python из столбца, как проверить конкретные слова / теги и показать их присутствие в новых связанных столбцах - PullRequest
0 голосов
/ 24 сентября 2018

Я новичок в питоне.У меня есть столбец в файле MS Excel, в котором используются four tag, которые LOC , ORG , PER и MISC, given data это , как это:

1 LOC/Thai Buddhist temple;
2 PER/louis;
3 ORG/WikiLeaks;LOC/Southern Ocean;
4 ORG/queen;
5 PER/Sanchez;PER/Eli Wallach;MISC/The Good, The Bad and the Ugly;
6 
7 PER/Thomas Watson;
...................
...................
.............#continue upto 2,000 rows

и яхотите Результат, который в определенной строке, какой тег присутствует или нет, если какой-либо тег присутствует, то в их конкретном (НОВЫЕ столбцы, которые показаны ниже) столбце поставить "1", а если не присутствует какой-либо тег, то поставить "0".Я хочу, чтобы все 4 столбца в этом файле Excel были LOC / ORG / PER / MISC и будут 2-м, 3-м, 4-м и 5-м столбцами, в то время как first column is given data, и файл содержит почти 2815 строк, и каждая строка имеет отличающийся от этих LOC тег/ ORG / PER / MISC.

Моя цель - подсчитать из новых столбцов

общее количество LOC, общее количество ORG, общее количество PER и общее количество MISC

Результат будет примерно так:

             given data              LOC  ORG  PER MISC
1 LOC/Thai Buddhist temple;           1    0    0   0   #here only LOC is present
2 PER/louis;                          0     0    1  0   #here only PER is present
3 ORG/WikiLeaks;LOC/Southern Ocean;   1     1   0   0   #here LOC and ORG is present
4 PER/Eli Wallach;MISC/The Good;      0     0   1   1   #here PER and MISC is present
5    .................................................
6                                     0     0   0   0   #here no tag is present
7 .....................................................
.......................................................
..................................continue up to 2815 rows....

Я новичок в Python.so, я старался изо всех сил искать его код решенияно я не могу найти ни одной программы, связанной с моей проблемой, поэтому я разместил здесь.так что любезно кто-нибудь помогает мне.

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

если вы прочитали свои данные, df, тогда вы можете сделать:

pd.concat([df,pd.DataFrame({i:df.Tagstring.str.contains(i).astype(int) for i in 'LOC  ORG  PER MISC'.split()})],axis=1)
Out[716]: 
                                                 Tagstring  LOC  ORG  PER    MISC 
Colnum                                                                      
1                                LOC/Thai Buddhist temple;    1    0    0       0
2                                               PER/louis;    0    0    1       0
3                        ORG/WikiLeaks;LOC/Southern Ocean;    1    1    0       0
4                                               ORG/queen;    0    1    0       0
5        PER/Sanchez;PER/Eli Wallach;MISC/The Good, The...    0    0    1       1
6                                       PER/Thomas Watson;    0    0    1       0
0 голосов
/ 24 сентября 2018

Я предполагаю, что вы успешно прочитали данные из Excel и создали фрейм данных в python, используя pandas (Для чтения файла Excel у нас есть df1 = read_excel ("File / path / name.xls" Header = True / False)).

Вот схема вашего фрейма данных df1

Colnum | Tagstring
1      |LOC/Thai Buddhist temple;
2      |PER/louis;
3      |ORG/WikiLeaks;LOC/Southern Ocean;
4      |ORG/queen;
5      |PER/Sanchez;PER/Eli Wallach;MISC/The Good, The Bad and the Ugly;
6      |PER/Thomas Watson;

Теперь есть несколько способов поиска текста в строке.

Я продемонстрирую функцию поиска:

Синтаксис: str.find (str, beg = 0, end = len (string))

str1 = "LOC";
str2 = "PER";
str3 = "ORG";
str4 = "MISC";

df1["LOC"] = (if Tagstring.find(str1) >= 0 then 1 else 0).astype('int')
df1["PER"] = (if Tagstring.find(str2) >= 0 then 1 else 0).astype('int')
df1["ORG"] = (if Tagstring.find(str3) >= 0 then 1 else 0).astype('int')
df1["MISC"] = (if Tagstring.find(str4) >= 0 then 1 else 0).astype('int')
...