如何从 Python 中的 txt 文件中读取数据集?

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)

什么是好的解决方案?

Sud*_*sak 7

你可以使用熊猫。它们非常适合读取 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)


Pad*_*ham 0

拆分并转置列表:

 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)