Импорт данных из файла .txt с разрывами строк между столбцами с использованием панд - PullRequest
0 голосов
/ 11 октября 2018

Я импортирую данные из Boston Housing Data в кадр данных pandas.Последние 3 элемента для каждой строки разделены на следующую строку.Есть ли способ импортировать данные, используя pd.read_csv, чтобы включить эти отключенные элементы?Вот мой код:

import pandas as pd
path = '/Users/Main/Desktop/boston.txt'
df = pd.read_csv(path, skiprows=21, sep='\s+', header=None)

Это дает мне фрейм данных с 11 столбцами, но мне нужно 14 столбцов.Кроме того, есть ли лучший способ пропустить весь текст в верхней части файла без ручного подсчета каждой строки?

Ответы [ 2 ]

0 голосов
/ 26 апреля 2019

В итоге я попробовал ту же идею, добавив каждую строку переполнения к строке перед ней.

boston = pd.read_csv("FILE_LOCATION", sep='\s+', header = None)

oklist = []

for row in range(1012):

    if row % 2 == 0:
        rowa = boston.iloc[row,]
        row = row + 1
        rowb = boston.iloc[row,]

        new_row = rowa.append(rowb)
        clean_list = new_row.iloc[0:14].tolist()
        oklist.append(clean_list)

pd.DataFrame(oklist)
0 голосов
/ 11 октября 2018

Прежде всего, вы можете просто использовать набор данных для бостонского корпуса из scikit-learn.http://scikit -learn.org / стабильный / модули / полученные / sklearn.datasets.load_boston.html .Если вы все еще хотите использовать текстовый файл, к сожалению, я думаю, вам придется выполнить некоторую обработку текстового файла, чтобы удалить разрывы строк.Я попытался привести пример необходимой обработки.

# read the file, and separate the lines.
with open('boston.txt', 'r') as f:
    text = [line for line in f.readlines()]

# starting from first row of data, remove \n from even numbered rows,
# and append the next row to it.
start_row = 22
new_rows = []
for i,l in enumerate(text[start_row:]):
    if not i%2:
        newl = l.strip('\n')+text[start_row+i+1]
        new_rows.append(newl)

new_data = ''.join(new_rows)

# finally save the data.
with open('boston_new.txt', 'w') as f:
    f.write(new_data)

Теперь вы можете легко читать данные.Delim_whitespace похож на использование sep = '\ s +'.

col_names = ['CRIM', 'ZN', 'INDUS', 'CHAS','NOX', 'RM', 'AGE', 'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT', 'MEDV']
pd.read_csv('boston_new.txt', delim_whitespace=True, header=None, names=col_names)

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

pd.to_csv('boston_final.csv')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...