使用 pandas 从.txt列之间带有换行符的文件导入数据



我正在将波士顿住房数据中的数据导入到熊猫数据帧中。每行的最后 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/generated/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格式,该格式可供 pandas 读取,而无需提供太多参数。

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)

最新更新