создайте фрейм данных, используя заголовки и текст

#python #pandas #dataframe

Вопрос:

У меня есть файл в следующем формате:

Заголовок 1

Немного текста здесь

Раздел 2

Немного текста здесь

Раздел 3

Немного текста здесь

Мне нужно создать фрейм данных в формате

df=

Заголовок текст
Заголовок 1 Немного текста здесь
Раздел 2 Немного текста здесь
Раздел 3 Немного текста здесь

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

1. является ли файл просто текстовым файлом?

2. Да, это текстовый файл

3. Как отличить заголовок от текста?

Ответ №1:

Вы можете попробовать код ниже:

 with open('data.txt') as fp:  data = [line.strip() for line in fp if line.strip()]  df = pd.DataFrame(list(zip(data[::2], data[1::2])), columns=['Heading', 'text'])  

Выход:

 gt;gt;gt; df  Heading text 0 Heading 1 Some text here 1 Heading 2 Some text here 2 Heading 3 Some text here  

Содержимое data.txt файла:

 Heading 1  Some text here  Heading 2  Some text here  Heading 3  Some text here  

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

1. Этот более надежный и очищает пустые строки (не говоря уже о том, что не импортирует другие библиотеки). Но было бы здорово, если бы вы могли объяснить, почему этот код будет работать.

Ответ №2:

Учитывая, что файл имеет заголовок в нечетных и текст в четных строках:

Сначала вы читаете все данные и создаете numpy массив. Тогда вы можете изменить его так, чтобы он был nx2 . И последнее, но не менее важное: вы создаете из него фрейм данных.

 import numpy as np import pandas as pd  with open("data.dat", "r") as the_file:  data = np.array([d.strip() for d in the_file])  df = pd.DataFrame(data.reshape((-1, 2)), columns=["Heading", "text"])  

Ответ №3:

Следующее может быть адаптировано, если вы хотите понять способ структурирования своего кода.

 df= DataFrame() header=[] text=[] with open("sample.txt", "r") as f:  for f_line in f.readlines():  if f_line.startswith("Header"):  header.append(f_line.rstrip())  else:  text.append(f_line.rstrip())  df['header']=header  df['text']=text