使用 Numpy 导入数据时排除某些行

Excluding certain rows while importing data with Numpy

我正在从实验中生成数据集。我最终得到的 csv 数据集通常是 n x 4 维(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) 导入文件时忽略前两行,但是是否有一种简单的方法也可以 select 固定要忽略的底部行数?

注意:这与在 numpy 数组中查找唯一行无关。更多关于导入每行包含的列数不均匀的 csv 数据。

您的问题与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)

希望对您有所帮助!

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

np.genfromtxt('array.txt', delimiter=',', skip_header=2, skip_footer=3)