Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python genfromtxt加载按行排列的数据_Python_Numpy_Matplotlib - Fatal编程技术网

Python genfromtxt加载按行排列的数据

Python genfromtxt加载按行排列的数据,python,numpy,matplotlib,Python,Numpy,Matplotlib,我有以下格式的数据csv文件: 130, 706, 249, 627, 428, 767, 430, 63, 884, 593 964, 340, 848, 607, 142, 517, 294, 453, 398, 236, 314, 653, 211, 439, 226 是否有方法加载此数据,以便最终数组包含文件中数据的转置版本,并且最短列(即数据文件中的最短行)的末尾包含nan值 最终结果应如下所示: array([[130, 964], [706, 340], [249, 848],

我有以下格式的数据csv文件:

130, 706, 249, 627, 428, 767, 430,  63, 884, 593
964, 340, 848, 607, 142, 517, 294, 453, 398, 236, 314, 653, 211, 439, 226
是否有方法加载此数据,以便最终数组包含文件中数据的转置版本,并且最短列(即数据文件中的最短行)的末尾包含nan值

最终结果应如下所示:

array([[130, 964],
[706, 340],
[249, 848],
[627, 607],
[428, 142],
[767, 517],
[430, 294],
[63, 453],
[884, 398],
[593, 236],
[np.nan, 314], 
[np.nan, 653],
[np.nan, 211],
[np.nan, 439],
[np.nan, 226]])

您可以使用
itertools.izip\u longest

from itertools import izip_longest

gen = (line.strip().split(',') for line in open('test.txt'))
np.float_(list(izip_longest(*gen, fillvalue=np.nan)))
其中:

array([[ 130.,  964.],
       [ 706.,  340.],
       [ 249.,  848.],
       [ 627.,  607.],
       [ 428.,  142.],
       [ 767.,  517.],
       [ 430.,  294.],
       [  63.,  453.],
       [ 884.,  398.],
       [ 593.,  236.],
       [  nan,  314.],
       [  nan,  653.],
       [  nan,  211.],
       [  nan,  439.],
       [  nan,  226.]])

如果您的文件中有用逗号分隔的空字段,则会容易得多,如下所示:

130, 706, 249, 627, 428, 767, 430,  63, 884, 593,    ,    ,    ,    ,
964, 340, 848, 607, 142, 517, 294, 453, 398, 236, 314, 653, 211, 439, 226
然后你就可以做:

>>> np.genfromtxt('csv.csv', delimiter=',', unpack=True)
array([[ 130.,  964.],
       [ 706.,  340.],
       [ 249.,  848.],
       [ 627.,  607.],
       [ 428.,  142.],
       [ 767.,  517.],
       [ 430.,  294.],
       [  63.,  453.],
       [ 884.,  398.],
       [ 593.,  236.],
       [  nan,  314.],
       [  nan,  653.],
       [  nan,  211.],
       [  nan,  439.],
       [  nan,  226.]])
请注意,这是一个浮点数组。似乎整数数组中不能有
nan
s。但是,您可以使用屏蔽数组:

np.ma.masked_equal(
      np.genfromtxt('csv.csv', delimiter=',', dtype=int, unpack=True),
      -1)
因此,只需预处理文件(如果您知道列数)可能会更容易:


其中
14
是列数减去1。

是的,它工作得很好,但我考虑了numpy.genfromtxt的特性。@user1850133我明白了,但不幸的是
genfromtxt
无法处理这种缺失值。您可能会执行
np.genfromtxt(izip_longest(*gen,fillvalue=np.nan))
并获得相同的结果,以及一些您可能需要的
genfromtxt()
的其他资源。。。
with open('csv.csv') as fin, open('new.csv', 'w') as fout:
    for line in fin:
        fout.write(line.replace('\n', ',' * (14 - line.count(',')) + '\n'))