我正在从文件中读取数据集(由空格分隔)。我需要存储数组data
中最后一列以及数组target
中最后一列的所有列。
你能指导我如何继续前进吗?
到目前为止我所拥有的:
with open(filename) as f:
data = f.readlines()
或者我应该逐行阅读?
PS:列的数据类型也不同。
修改:示例数据
faban 1 0 0.288 withspy
faban 2 0 0.243 withoutspy
simulated 1 0 0.159 withoutspy
faban 1 1 0.189 withoutspy
答案 0 :(得分:7)
这样可行:
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']
答案 1 :(得分:2)
我认为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']
答案 2 :(得分:2)
您可以使用pandas
使用read_table
来阅读您的数据,iloc
来对您的数据进行分组,values
从DataFrame和tolist
获取值将numpy数组转换为list的方法:
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']
答案 3 :(得分:0)
以下效果很好:
data = open('<FILE>', 'r').read().split('\n')
out = []
for l in data:
out.append([e for e in l.split(' ') if e])
然后out 的格式为 [['faban','1','0','0.288','withspy'],[...]。 ..] (注意,所有元素都是字符串)