Как добавить каждый элемент (предложение) списка в столбец pandas?

#python-3.x #pandas

Вопрос:

Я извлекаю информацию о химических элементах из Википедии. Он содержит предложения, и я хочу, чтобы каждое предложение было добавлено следующим образом:

Молекула Приговор1 Приговор 1 и приговор 2 All_sentence
MgO это s1. это s1. это s2. all_sentence
ЦаО это s1. это s1. это s2. all_sentence

Чего я достиг до сих пор

 import spacy import pandas as pd import wikipediaapi import csv   wiki_wiki = wikipediaapi.Wikipedia('en') chemical = input("Write the name of molecule: ")  page_py = wiki_wiki.page(chemical) sumary = page_py.summary[0:]  nlp = spacy.load('en_core_web_sm')  text_sentences = nlp(sumary) sent_list = [] for sentence in text_sentences.sents:  sent_list.append(sentence.text)   #print(sent_list)   df = pd.DataFrame(  {'Molecule': chemical,  'Description': sent_list}) print(df.head())  

Результат выглядит следующим образом:

Молекула Описание
MgO Все предложения здесь
Mgo

Столбцы молекул отображаются повторно для каждой неправильной строки предложения. Пожалуйста, предложите какое-нибудь решение

Ответ №1:

Непонятно, почему вы хотите повторить все предложения в каждой колонке, но вы можете перейти к нужной форме с помощью pivot :

 import spacy import pandas as pd import wikipediaapi import csv   wiki_wiki = wikipediaapi.Wikipedia('en') chemical = input("Write the name of molecule: ")  page_py = wiki_wiki.page(chemical) sumary = page_py.summary[0:]  nlp = spacy.load('en_core_web_sm')  sent_list = [sent.text for sent in nlp(sumary).sents] #cumul_sent_list = [' '.join(sent_list[:i]) for i in range(1, len(sent_list) 1)] # uncomment to cumulate sentences in columns  df = pd.DataFrame(  {'Molecule': chemical,  'Description': sent_list}) # replace sent_list with cumul_sent_list if cumulating df["Sentences"] = pd.Series([f"Sentence{i   1}" for i in range(len(df))]) # replace "Sentence{i 1}" with "Sentence1-{i 1}" if cumulating df = df.pivot(index="Molecule", columns="Sentences", values="Description") print(df)  

sent_list может быть создан с использованием понимания списка. Создайте cumul_sent_list , если вы хотите, чтобы ваши предложения повторялись в столбцах.

Выход:

 Sentences Sentence1 ... Sentence9 Molecule ...  MgO Magnesium oxide (MgO), or magnesia, is a white... ... According to evolutionary crystal structure pr...  

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

1. это дает мне эту ошибку » или магнезия, это белый цвет… [1 строка x 8 столбцов]Исключение игнорируется в: lt;функция Wikipedia.__del__ в 0x7f5ef530bb80gt;Обратная трассировка (последний последний вызов): Файл «/anaconda3/envs/wiki-env/lib/python3.8/site-packages/wikipediaapi/__init__.py», строка 170, в файле __del__»/ana/envs/wiki/lib/python3.8/site-packages/requests/sessions.py», строка 747, рядом envs/lib/python3.8/site-packages/urllib3/poolmanager.py»packages/urllib3/_collections.py», строка 95, в clearTypeError: объект ‘NoneType’ не может быть вызван

2. Проблема , похоже wikipediaapi , в том, есть ли у вас другой запущенный экземпляр?

3. В случае MgO вывода должно быть [1 строка х 10 столбцов]

4. да, но я хочу, чтобы в первом столбце было показано первое предложение, во втором столбце s1 s2 и в 3-м столбце-все выходные данные. Я не знаю, как это сделать. вы можете создавать столбцы в зависимости от количества предложений. но мне нужны только три столбца для первого предложения, первого и второго предложения и, наконец, все предложения в последней колонке.

5. Затем определите cumul_sent_list = [sent_list[0], ' '.join(sent_list[:2]), ' '.join(sent_list)] и отрегулируйте df["Sentences"] в соответствии с ожидаемыми столбцами