[英]Importing data from .txt file with line breaks in between columns using pandas
我正在將數據從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列。 另外,是否有更好的方法跳過文件頂部的所有文本而無需手動計算每一行?
首先,您可以只使用scikit-learn的波士頓房屋數據集。 http://scikit-learn.org/stable/modules/generation/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')
我最終嘗試了相同的想法,將每個溢出行附加到它之前的行。
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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.