簡體   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