Ewy*_*ybe 5 python string file matrix dataset
我有一个这种格式的数据集:

我需要导入数据并使用它。
主要问题是第一列和第四列是字符串,而第二列和第三列分别是浮点数和整数。
我想将数据放入矩阵中,或者至少获得每列数据的列表。
我试图将整个数据集作为字符串读取,但它很混乱:
f = open ( 'input.txt' , 'r')
l = [ map(str,line.split('\t')) for line in f ]
Run Code Online (Sandbox Code Playgroud)
什么是好的解决方案?
你可以使用熊猫。它们非常适合读取 csv 文件、制表符分隔的文件等。 Pandas 几乎所有时间都会正确读取数据类型,并在使用行/列访问时将它们放入一个 numpy 数组中,如图所示。
我使用了这个制表符分隔的“test.txt”文件:
bbbbffdd 434343 228 D
bbbWWWff 43545343 289 E
ajkfbdafa 2345345 2312 F
Run Code Online (Sandbox Code Playgroud)
这是熊猫代码。将使用 Python 中的一行在一个不错的数据框中读取您的文件。您可以将 'sep' 值更改为适合您文件的任何其他值。
import pandas as pd
X = pd.read_csv('test.txt', sep="\t", header=None)
Run Code Online (Sandbox Code Playgroud)
然后尝试:
print X
0 1 2 3
0 bbbbffdd 434343 228 D
1 bbbWWWff 43545343 289 E
2 ajkfbdafa 2345345 2312 F
print X[0]
0 bbbbffdd
1 bbbWWWff
2 ajkfbdafa
print X[2]
0 228
1 289
2 2312
print X[1][1:]
1 43545343
2 2345345
Run Code Online (Sandbox Code Playgroud)
您可以将列名称添加为:
X.columns = ['random_letters', 'number', 'simple_number', 'letter']
Run Code Online (Sandbox Code Playgroud)
然后将列获取为:
X['number'].values
array([ 434343, 43545343, 2345345])
Run Code Online (Sandbox Code Playgroud)
拆分并转置列表:
with open ( 'in.txt' , 'r') as f: # use with to open your files, it close them automatically
l = [x.split() for x in f]
rows = [list(x) for x in zip(*l)]
rows[1],rows[2] = map(float,rows[1]),map(int,rows[2])
In [16]: rows
Out[16]:
[['bbbbffdd', 'bbbWWWff', 'ajkfbdafa'],
[434343.0, 43545343.0, 2345345.0],
[228, 289, 2312],
['D', 'E', 'F']]
Run Code Online (Sandbox Code Playgroud)