#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