разделение текстового файла на два столбца с помощью pandas

#pandas #csv #export-to-csv #data-cleaning

#pandas #csv #экспорт в csv #очистка данных

Вопрос:

У меня есть текстовый файл скрипта, и он упорядочен следующим образом:

 0 "character one" "dialogue for character one."
1 "character two" "dialogue for character two." 
2 "character one" "dialogue for character one again"
...
etc
 

Моя проблема в том, что я хочу проанализировать этот текст, и мне нужно, чтобы он был в формате .csv, где символ находится в первом столбце, а диалог — во втором столбце.

Я прочитал файл .txt в pandas следующим образом:

txt_ep_4 = pd.read_table('/Users/nathancahn/star_wars/0_data/ep_IV_script.txt') итак, теперь у меня есть ряд данных pandas (а не фрейм данных) для взаимодействия.

В основном я пробовал разные методы разделения текста на столбцы с помощью Series.str.split(), но безуспешно. Раньше я указывал series_txt_ep_4.str.split(pat=" ") разделение через пробел, но вместо этого оно разделялось через каждый пробел.

Опять же, мой идеальный результат состоял бы в том, чтобы первый столбец был именем символа, а второй столбец — строкой диалога, связанной с этим символом.

Ответ №1:

Я считаю, что вам нужно read_csv с параметрами sep и names для новых имен столбцов, потому что в pandas 0.24.2 get:

Предупреждение на будущее: read_table устарел, вместо этого используйте read_csv .

 temp=u'''"character one" "dialogue for character one."
"character two" "dialogue for character two." 
"character one" "dialogue for character one again"'''
#after testing replace 'pd.compat.StringIO(temp)' to 'filename.csv'
df = pd.read_csv(pd.compat.StringIO(temp), sep="s ", names=['a','b'])
#alternative
#df = pd.read_csv(pd.compat.StringIO(temp), delim_whitespace=True, names=['a','b'])
print (df)
               a                                 b
0  character one       dialogue for character one.
1  character two       dialogue for character two.
2  character one  dialogue for character one again
 

Редактировать:

Если значения также имеют заголовок:

 temp=u""""character" "dialogue"
"1" "THREEPIO" "Did you hear that?  They've shut down the main reactor.  We'll be destroyed for sure.  This is madness!"
"2" "THREEPIO" "We're doomed!"
"3" "THREEPIO" "There'll be no escape for the Princess this time."
"4" "THREEPIO" "What's that?"
"5" "THREEPIO" "I should have known better than to trust the logic of a half-sized thermocapsulary dehousing assister..."
"6" "LUKE" "Hurry up!  Come with me!  What are you waiting for?!  Get in gear!"
"7" "THREEPIO" "Artoo! Artoo-Detoo, where are you?"
"8" "THREEPIO" "At last!  Where have you been?"
"9" "THREEPIO" "They're heading in this direction. What are we going to do?  We'll be sent to the spice mines of Kessel or smashed into who knows what!"
"10" "THREEPIO" "Wait a minute, where are you going?"
"""
#after testing replace 'pd.compat.StringIO(temp)' to 'filename.csv'
df = pd.read_csv(pd.compat.StringIO(temp), sep="s ")
 

 print (df)

   character                                           dialogue
1   THREEPIO  Did you hear that?  They've shut down the main...
2   THREEPIO                                      We're doomed!
3   THREEPIO  There'll be no escape for the Princess this time.
4   THREEPIO                                       What's that?
5   THREEPIO  I should have known better than to trust the l...
6       LUKE  Hurry up!  Come with me!  What are you waiting...
7   THREEPIO                 Artoo! Artoo-Detoo, where are you?
8   THREEPIO                     At last!  Where have you been?
9   THREEPIO  They're heading in this direction. What are we...
10  THREEPIO                Wait a minute, where are you going?
 

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

1. Интересно, похоже, это правильное направление. Однако я не уверен, что на 100% понимаю этот код. Итак temp , здесь должен быть pd.series, который я передаю? Потому что я получаю сообщение об ошибке при попытке прочитать pd.series в это.

2. @NathanCahn — Нет, не передавайте серии, используйте txt_ep_4 = pd.read_csv('/Users/nathancahn/star_wars/0_data/ep_IV_script.txt', sep="s ", names=['a','b'])

3. Ах, хорошо, похоже, что это дало фрейм данных pandas, который обрезается после «символа» и теперь не включает диалог. Теперь я понимаю, что это может быть связано с тем, что мой файл .txt фактически содержит номер индекса перед столбцом «символ». Вот так: « «1» «символ» «диалог» «2» «символ» «диалог» и т. Д. «

4. @NathanCahn — Являются ли данные конфиденциальными?

5. @NathanCahn — поскольку лучше всего работать с файлом, если некоторые цитаты и тому подобное, если вставить значения для вопроса, возможно, некоторые значения следует изменить. итак, возможно ли загрузить первые 5 строк с файлом в gdocs, dropbox или аналогичные и поделиться ссылкой?