繁体   English   中英

Numpy 从文本文件中读取可变数量的列到数组中

[英]Numpy read variable amount of columns from a text file into an array

我的文件格式如下:

  2106   2002   27   26   1
 1   0.000000  0.000000 
 2   0.389610  0.000000 
 3   0.779221  0.000000 
 4   1.168831  0.000000 
 5   1.558442  0.000000 
 6   1.948052  0.000000 
 7   2.337662  0.000000 
 8   2.727273  0.000000 
 9   3.116883  0.000000 
 10   3.506494  0.000000 

我想读这些。 有比这更多的行,有些只有两列。 在 MATLAB 中,我使用 readmatrix() 并且效果很好,Python 有什么可比性吗? 因为python genfromtxt()python loadtxt不适用于可变数量的列。

我应该坚持使用 MATLAB,因为 Python 似乎缺少这样的关键功能吗?

编辑:这是我在 matlab 中得到的 output,我希望在 numpy 中得到:

2106    2002    27  26  1   0
1   0   0   0   0   0
2   0.389610000000000   0   0   0   0
3   0.779221000000000   0   0   0   0
4   1.16883100000000    0   0   0   0
5   1.55844200000000    0   0   0   0
6   1.94805200000000    0   0   0   0
7   2.33766200000000    0   0   0   0
8   2.72727300000000    0   0   0   0
9   3.11688300000000    0   0   0   0
10  3.50649400000000    0   0   0   0
import numpy as np

headers = []
rows = []
with open("test.txt", 'r') as file:
    for i, v in enumerate(file.readlines()):
        if i == 0:
            headers.extend(v.split())
        else:
            rows.append(v.split())
for i, v in enumerate(rows):
    while len(v) != len(headers):
        v.append(0)
    rows[i] = v
rows = np.array(rows)

让我知道是否需要任何修改

您的列中缺少值,matlab 将它们解释为 0。您可以将类似的结构导入 pandas,pandas 将具有正确的列数。 它将缺失值解释为nan ,如果您愿意,稍后可以将其替换为 0。 唯一的问题是第一行有正确的列号。 如果你在它的末尾有 0,把它放在 0 而不是空格:

df = pd.read_csv('file.csv', sep='\s+').fillna(0)

output:

   2106      2002   27   26    1    0
0     1  0.000000  0.0  0.0  0.0  0.0
1     2  0.389610  0.0  0.0  0.0  0.0
2     3  0.779221  0.0  0.0  0.0  0.0
3     4  1.168831  0.0  0.0  0.0  0.0
4     5  1.558442  0.0  0.0  0.0  0.0
5     6  1.948052  0.0  0.0  0.0  0.0
6     7  2.337662  0.0  0.0  0.0  0.0
7     8  2.727273  0.0  0.0  0.0  0.0
8     9  3.116883  0.0  0.0  0.0  0.0
9    10  3.506494  0.0  0.0  0.0  0.0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM