#python #pandas #csv
#python #pandas #csv
Вопрос:
Я пытаюсь загрузить данный CSV-файл со следующей структурой:
Затем я хотел бы объединить все слова с одинаковым «Sent_ID» в одну строку, используя следующий код:
train = pd.read_csv("train.csv")
# Create a dataframe of sentences.
sentence_df = pd.DataFrame(train["Sent_ID"].drop_duplicates(), columns=["Sent_ID", "Sentence", "Target"])
for _, row in train.iterrows():
print(str(row["Word"]))
sentence_df.loc[sentence_df["Sent_ID"] == row["Sent_ID"], ["Sentence"]] = str(row["Word"])
Однако результат print(str(строка[«Word»])) равен:
Name: Word, Length: 4543833, dtype: object
0 Obesity
1 in
2 Low-
3 and
4 Middle-Income
5 Countries
...
то есть каждое отдельное слово в столбце для любой заданной строки. Это происходит для всех строк.
Печать всей строки дает:
id 89
Doc_ID 1
Sent_ID 4
Word 0 Obesityn1 ...
tag O
Name: 88, dtype: object
Это еще раз говорит о том, что каждый элемент столбца «Слово» присутствует в каждой ячейке. (88-я запись — это не «Ожирение n1» в файле .csv.
Я пытался изменить аргумент цитирования в функции read_csv, а также вручную вставить заголовки в аргумент names, но безрезультатно.
Как мне убедиться, что каждая запись фрейма данных содержит только свое собственное слово?
Я здесь добавил файл pastebin с некоторыми примерами (срок действия файла pastebin истечет через неделю после этого редактирования).
Комментарии:
1. Что именно вы пытаетесь сделать со своим кодом, так какова цель этого csv после прочтения его в pandas?
2. Этот код будет использоваться для классификации предложений с использованием LSTM. Я пытаюсь создать одну строку для каждого предложения, тогда как файл .csv выделяет каждому слову отдельную строку. Исходные строки имеют «Sent_ID», который одинаков для каждого слова (т. Е. строки в .csv) в предложении.
3. Код @Aravind работает для меня, делая то, что вы хотите? Если вы хотите, я могу ответить и показать пример.
4. Это было бы неплохо, поскольку использование этого решения, похоже, не работает для меня. Каждая строка результирующего фрейма данных по-прежнему содержит каждое отдельное слово из csv-файла в столбце «Word», а не отдельные предложения.
5. Смотрите мой ответ, помогает ли это?
Ответ №1:
Основываясь на ответе @Aravinds, OP хотел рабочий пример:
from io import StringIO
csv = StringIO('''
<paste csv snippet here>
'''
df = pd.read_csv(csv)
# Print first 5 rows
print(df.head())
id Doc_ID Sent_ID Word tag
0 1 1 1 Obesity O
1 2 1 1 in O
2 3 1 1 Low- O
3 4 1 1 and O
4 5 1 1 Middle-Income O
Теперь у нас есть данные, загруженные в виде pandas.DataFrame
Мы можем использовать метод для объединения слов в предложения.
df = df.groupby('Sent_ID').Word.apply(' '.join).reset_index()
print(df)
Sent_ID Word
0 1 Obesity in Low- and Middle-Income Countries : ...
1 2 We have reviewed the distinctive features of e...
2 3 Obesity is rising in every region of the world...
3 4 In LMICs , overweight is higher in women compa...
4 5 Overweight occurs alongside persistent burdens...
5 6 Changes in the global diet and physical activi...
6 7 Emerging risk factors include environmental co...
7 8 Data on effective strategies to prevent the on...
8 9 Expanding the research in this area is a key p...
9 10 MICROCEPHALIA VERA
10 11 Excellent reproducibility of laser speckle con...
11 12 We compared the inter-day reproducibility of p...
12 13 We also tested whether skin blood flow assessm...
13 14 Skin blood flow was evaluated during PORH and ...
14 15 Data are expressed as cutaneous vascular condu...
15 16 Reproducibility is expressed as within subject...
16 17 Twenty-eight healthy participants were enrolle...
17 18 The reproducibility of the PORH peak CVC was b...
18 19 Inter-day reproducibility of the LTH plateau w...
19 20 Finally , we observed significant correlation ...
20 21 The recently developed LSCI technique showed v...
21 22 Moreover , we showed significant correlation b...
22 23 However , more data are needed to evaluate the...
23 24 Positive inotropic action of cholinesterase on...
24 25 The putative chloride channel hCLCA2 has a sin...
25 26 Calcium-activated chloride channel ( CLCA ) pr...
26 27 Genetic and electrophysiological studies have ...
27 28 The human CLCA2 protein is expressed as a 943-...
28 29 Earlier investigations of transmembrane geomet...
29 30 However , analysis by the more recently derive...
Комментарии:
1. Это идеально, но в первом блоке кода у меня возникает проблема, поскольку мой столбец «Word» работает некорректно. Это моя главная проблема. Редактировать: Моя проблема, похоже, исправилась после перезагрузки, поэтому этот ответ работает. Спасибо!
Ответ №2:
Использовать groupby()
df = df.groupby('Sent_ID')['Word'].apply(' '.join).reset_index()
Вы можете сгруппировать по нескольким столбцам в виде списка. Вот так
df.groupby(['Doc_ID','Sent_ID','tag'])
Комментарии:
1. Это хорошо, когда фрейм данных содержит данные в правильном формате, но моя проблема в том, что каждая запись в столбце «Word» содержит все слова в столбце «Word» файла .csv.
2. Можете ли вы добавить csv в виде фрагмента, чтобы я мог скопировать вставить и протестировать? Я посмотрю на это завтра. Нужно идти сейчас.
3. Я не мог понять фрагменты, поэтому я добавил часть файла .csv в pastebin. Надеюсь, этого достаточно. Спасибо, что изучили это.