在numpy loadtxt之后重塑:无法将x大小的数组重塑为形状(x,y)

时间:2017-10-07 23:13:15

标签: python file numpy

我有以下文本文件,file.txt包含3行和4列:

0.0 0.0 0.0
0.0 0.0 10.0
15 10 2001 2995

我正在使用np.loadtxt将其作为数组读取。 Loadtxt将其作为一维数组读入,我想将其转换回文本文件中的3x4数组。我试过了

file = sys.argv[1] #I'm just reading it from the command line when executing the program
data = np.loadtxt(file, delimiter='\t', dtype = str)
print(data.shape, data)
data = data.reshape(3,4)

但收到以下错误:

(3,)
['0.0 0.0 0.0' '0.0 0.0 10.0' '15 10 2001 2995']
ValueError: cannot reshape array of size 3 into shape (3,4)

我已经删除了形状和错误之间的非相关信息。如何将此文本文件重新整形为3x4阵列?它不必通过加载文本。我也试过使用np.genfromtxt也无济于事。

2 个答案:

答案 0 :(得分:2)

Pandas非常擅长阅读缺少条目的数据。如果您没有熊猫,可以使用以下命令安装:

pip install pandas

在此之后,您可以使用pd.read_table来阅读您的数据。缺少的值将替换为NaN s。

import pandas as pd
x = pd.read_table('data.txt', sep='\s+', 
            header=None, names=range(4)).values

print(x)
array([[    0.,     0.,     0.,    nan],
       [    0.,     0.,    10.,    nan],
       [   15.,    10.,  2001.,  2995.]])

答案 1 :(得分:1)

您无需reshape数据,只需将loadtxt函数中的分隔符从,更改为空格' '

data = np.loadtxt(file, delimiter=' ', dtype = str)

这实际上会将您的数据加载为3x4字符串数组,其中缺少的元素显示为空字符串''。然后,您可以使用

将其替换为零
np.place(data, data == '', '0.0')

使用以下方法转换为浮点数:

data = np.asarray(data, dtype = float)