当前位置: 首页 > 知识库问答 >
问题:

使用numpy读取列数不等的数据文件

权黎昕
2023-03-14

我有一个。带有数字的dat文件。在第一行中,该文件有五列,在所有后续行中,它有四列。我希望能够使用numpy读取此文件。我目前尝试读取此文件时遇到以下错误:

In [3]: F1 = np.loadtxt(‘file.dat')
---------------------------------------------------------------------------
ValueError                                Traceback (most recent 
call last)
<ipython-input-3-c0f31adaf29a> in <module>()
----> 1 F1 = np.loadtxt(‘file.dat')

/Users/usr/anaconda2/lib/python2.7/site-packages/numpy/lib/npyio.pyc in loadtxt(fname, dtype, comments, delimiter, converters, skiprows, usecols, unpack, ndmin, encoding)
   1090         # converting the data
   1091         X = None
-> 1092         for x in read_data(_loadtxt_chunksize):
   1093             if X is None:
   1094                 X = np.array(x, dtype)

/Users/usr/anaconda2/lib/python2.7/site-packages/numpy/lib/npyio.pyc in read_data(chunk_size)
   1014                 line_num = i + skiprows + 1
   1015                 raise ValueError("Wrong number of columns at line %d"
-> 1016                                  % line_num)
   1017 
   1018             # Convert each value according to its column and store

ValueError: Wrong number of columns at line 2 

如何使用python读取文件中除第一行之外的所有行?我在这里附上了一个示例文件。

此外,该文件的第一列(减去第一行)有n^2行(在示例中,我有n=3,该列的条目为1,2,3,4,5,6,7,8,9)。我想读取第一列(减去第一行)并将其保存为文本文件,其中形状为(n,n)(即文本文件应该有n行和n列)。也就是说,我希望保存的矩阵具有以下顺序的条目:

1.0 2.0 3.0
4.0 5.0 6.0
7.0 8.0 9.0

我很感激能得到帮助。

共有1个答案

宗乐池
2023-03-14

要做的一些实验:(未优化)1.读入文件的行:

编辑:file.dat文件有空行。ifline.strip()...子句用于处理空行。

with open('file.dat', 'r') as fhand:
    file_lines = [line[:-1] for line in fhand if line.strip() != ''] # remove the last character '\n'. **Remove empty lines**.

如果你不喜欢第一排,就把它放下。

file_lines.pop(0)

现在,剩余的行具有相同数量的数字条目列,您可以拆分每行中的条目,并进行类型转换:

mat_raw = [[float(term) for term in line.split()] for line in file_lines]

然后你得到一个浮点矩阵。为了方便切片,将其转换为numpy数组。

mat = numpy.array(mat_raw)
# then you can do whatever you like. eg: first column
first_col = mat[:, 0]
# reshape it to n by n matrix:
res = first_col.reshape((n, n))
...

根据文件格式和目标,您可以优化此代码以供自己使用。

 类似资料:
  • 问题内容: 我有一个包含一些元数据的文件,然后是包含2个带有标题的列的实际数据。在numpy中使用genfromtxt之前,是否需要将两种类型的数据分开?还是可以以某种方式拆分数据?将文件指针放在标题上方行的末尾,然后从那里尝试genfromtxt怎么办?谢谢该文件的格式如下所示: 问题答案: 如果您不希望第一行,请尝试(如果没有丢失的数据): 或(如果缺少数据): 如果然后要解析标头信息,则可以

  • 问题内容: 如何使用Pandas读取以下(两列)数据(来自.dat文件) 列分隔符(至少)为2个空格。 我试过了 但它打印 问题答案: 您可以将参数usecols与列顺序一起使用: 编辑: 您可以使用分隔符-2个或更多空格,然后添加,因为出现警告: ParserWarning:回退到“ python”引擎,因为“ c”引擎不支持正则表达式分隔符(分隔符> 1个字符且与“ \ s +”不同的分隔符被

  • 我试图使用java apache poi从只读xlsm读取数据,但当我使用XSSF工作簿时,它似乎无法访问该文件,而HSSF工作簿仅适用于xls文件。我的代码如下所示: 代码从未到达“工作簿中”打印行,我不知道为什么。请帮忙!

  • 我如何完成这个任务?

  • 我正在尝试读取Mac上pig shell上的csv文件。我所做的只是文件到变量中,然后变量。我是这样做的: 我使用的数据是从这里提供的github下载的 此文件在我的Mac上的本地安装的hdfs中可用。当我执行时,我得到一个错误: org.apache.pig.impl.logicallayer.FrontendException:错误1066:无法打开别名影片的迭代器 在org.apache.p

  • 本文向大家介绍python numpy生成等差数列、等比数列的实例,包括了python numpy生成等差数列、等比数列的实例的使用技巧和注意事项,需要的朋友参考一下 如下所示: 补充拓展:python 等差数列生成器代码 典型的迭代器模式作用很简单——遍历数据结构。不过,即便不是从集合中获取元素,而 是获取序列中即时生成的下一个值时,也用得到这种基于方法的标准接口。例如,内置的 range 函数