2016-01-04 6 views
1

Я читаю набор данных (разделенных пробелами) из файла. Мне нужно хранить все столбцы отдельно от последнего в массиве data, а последний столбец в массиве target.Python: как читать файл и хранить определенные столбцы в массиве

Можете ли вы посоветовать мне, как продолжить дальше?

Это то, что я до сих пор:

with open(filename) as f: 
    data = f.readlines() 

Или я читать построчно?

PS: Тип данных столбцов также отличается.

Edit: Sample Data

faban  1 0 0.288 withspy 
faban  2 0 0.243 withoutspy 
simulated 1 0 0.159 withoutspy 
faban  1 1 0.189 withoutspy 
+1

Можете ли вы предоставить образцы данных? –

+0

Просьба проверить правую часть. – SaadH

+1

Возможно, вы захотите использовать модуль csv. –

ответ

4

Это будет работать:

data = [] 
target = [] 
with open('faban.txt') as fobj: 
    for line in fobj: 
     row = line.split() 
     data.append(row[:-1]) 
     target.append(row[-1]) 

Сейчас:

>>> data 
[['faban', '1', '0', '0.288'], 
['faban', '2', '0', '0.243'], 
['simulated', '1', '0', '0.159'], 
['faban', '1', '1', '0.189']] 

>>> target 
['withspy', 'withoutspy', 'withoutspy', 'withoutspy'] 
+0

Спасибо. Это то, что я искал :) – SaadH

0

следующие работы красиво:

data = open('<FILE>', 'r').read().split('\n') 
out = [] 
for l in data: 
    out.append([e for e in l.split(' ') if e]) 

из будет иметь следующий формат: [[ 'faban', '1', '0', '0,288', 'withspy'], [...], ...] (Примечание , все элементы являются строками)

1

Я думаю, что numpy имеет чистое и простое решение здесь.

>>> import numpy as np 
>>> data, target = np.array_split(np.loadtxt('file', dtype=str), [-1], axis=1) 

приводит:

>>> data.tolist() 
[['faban', '1', '0', '0.288'], 
['faban', '2', '0', '0.243'], 
['simulated', '1', '0', '0.159'], 
['faban', '1', '1', '0.189']] 
>>> target.flatten().tolist() 
['withspy', 'withoutspy', 'withoutspy', 'withoutspy'] 
0

Вы можете сделать это с pandas помощи read_table читать ваши данные, iloc подмножеству данных, values для получения значений из DataFrame и tolist метода для преобразования Numpy массива список:

import pandas as pd 
df = pd.read_table('path_to_your_file', delim_whitespace=True, header=None) 
print(df) 
      0 1 2  3   4 
0  faban 1 0 0.288  withspy 
1  faban 2 0 0.243 withoutspy 
2 simulated 1 0 0.159 withoutspy 
3  faban 1 1 0.189 withoutspy 


data = df.iloc[:,:-1].values.tolist() 
target = df.iloc[:,-1].tolist() 

print(data) 
[['faban', 1, 0, 0.28800000000000003], 
['faban', 2, 0, 0.243], 
['simulated', 1, 0, 0.159], 
['faban', 1, 1, 0.18899999999999997]] 

print(target) 
['withspy', 'withoutspy', 'withoutspy', 'withoutspy'] 
Смежные вопросы