我有以下文本文件,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也无济于事。
答案 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)