-1

我正在从实验中生成数据集。我最终得到了通常是n x 4维度的 csv 数据集(n行;n > 10004列)。但是,由于数据收集过程的人为因素,通常前几行和最后几行只有 2 或 3 列。所以一个数据集看起来像:

8,0,4091
8,0,
8,0,4091,14454
10,0,4099,14454
2,0,4094,14454
8,-3,4104,14455
3,0,4100,14455
....
....
14,-1,4094,14723
0,3,4105,14723
7,0,4123,14723
7,
6,-2,4096,
3,2,

如您所见,前两行和后三行没有我期望的 4 列。当我尝试使用 导入此文件np.loadtxt(filename, delimiter = ',')时,出现错误。一旦我删除了少于 4 列的行(在这种情况下,前 2 行和后 3 行),导入工作正常。

两个问题:

  1. 为什么通常的导入不起作用。我不确定此导入的确切错误是什么。换句话说,为什么所有行中的列数都不相同?

  2. 作为一种解决方法,我知道如何在使用 numpy 导入文件时忽略前两行np.loadtxt(filename, skiprows= 2),但是有没有一种简单的方法可以在底部选择固定数量的行来忽略?

注意:这不是关于在 numpy 数组中查找唯一行。它更多地是关于导入每行包含的列数不一致的 csv 数据。

4

2 回答 2

1

您可以使用genfromtxt,它允许在开头结尾跳过行:

np.genfromtxt('array.txt', delimiter=',', skip_header=2, skip_footer=3)
于 2017-01-18T00:26:51.093 回答
1

您的问题与Using genfromtxt to import csv data with missing values in numpy类似(重复)

1)我不确定为什么这是默认行为。

  • 可能是警告用户 CSV 文件可能已损坏。
  • 可能是优化数组并使其成为N x M,而不是具有多个列长度。

2)使用numpy的genfromtext。为此,您需要提前知道正确的列数。

data = numpy.genfromtxt('data.csv', delimiter=',', usecols=[0,1,2,3], invalid_raise=False)

希望这可以帮助!

于 2017-01-18T00:15:06.530 回答