将矩阵保存到数组中

Saving a matrix into an array

我想使用一些headers写在文本文件中的数据。该文件如下所示:

#Fruit list
#Prices from different vendors
   Pineapple    4.49   4.29   5.19
   Apple        1.99   1.89   2.19
   Banana       1.99   1.99   1.79
   Kiwi         2.99   2.99   2.99

我想将这个 table 保存到一个数组中。到目前为止我试过:

def fruits():
    items = []
    with open('prices.txt', 'r') as data:
        for line in data.readlines()[2:]:   #Header is always 2 lines 
            items.append(line.strip())
            species = np.array(items)
        return species

这 returns 是一个 0 维数组,而我期待的是一个二维数组。然后我尝试删除附加行(一开始似乎没有必要)并尝试:

def fruits():
    items = []
    with open('prices.txt', 'r') as data:
        for line in data.readlines()[2:]:
            species = np.array(line)
        return species

但是这returns只是最后一行。它必须是一个非常简单的修复,但我很困惑,尤其是第二次尝试。

如果您对 pandas 和 numpy 持开放态度,那么:

import pandas as pd
import numpy

df=pd.read_csv("Filename",index_col=0)
df.to_numpy()
df.to_records() #if index is needed too

应该给你所需的数组形式的数据

示例: 鉴于此文件:https://file.io/5mc5MGnh0pZN

我写了以下内容来阅读它:

然后将df转换为numpy数组:

虽然@JALO - JusAnotherLivngOrgani 的答案有效,但我还想添加一个仅使用 numpy 的替代方案:

    fruits = []
    with open('File.txt') as data:
        for line in data.readlines()[2:]: #Skipping the 2 line header
            fruits.append(line)
        string = [i for item in fruits for i in item.split()] # Gives a 1D list array.
        string = np.array(string).reshape(-1,4) # Converts the list array into 2D numpy array.

文件始终为 4 列,但行数不同,因此 '-1' 处理它。