簡體   English   中英

在 Python 中制作(以空格分隔的)文本文件的列(或行)數組

[英]Making arrays of columns (or rows) of a (space-delimited) textfile in Python

我見過類似的問題,但答案總是給出一串行。 我想制作文本文件列的數組。 我有一個這樣的文本文件(有一個看起來像這樣的文本文件,但有 106 行和 19 列):

O2     CO2     NOx     Ash     Other
20.9     1.6     0.04     0.0002    0.0
22.0     2.3     0.31     0.0005    0.0    
19.86     2.1     0.05     0.0002    0.0
17.06     3.01     0.28     0.006    0.001

我希望有列數組(所有列的二維數組或每列的一維數組),第一行僅用於名稱,然后是第一行的列表。 因為我想稍后繪制它們。

例如,所需的結果是一列:

   array([0.04,
         0.31 ,
         0.05,
         0.28 ], dtype=float32)

對於第一行:

   species= ['O2','CO2','NOx','Ash',' Other']

我建議不要手動循環大型數據集中的值(在這種情況下是一種制表符分隔的關系模型)。 只需使用安全且知名的庫(如 NumPy)的方法:

import numpy as np

data = np.transpose(np.loadtxt("/path/to/file.txt", skiprows=1, delimiter="\t"))

使用內部loadtxt讀取文件並使用skiprows=1參數跳過第一行(列名)以避免不兼容的數據類型和進一步的轉換。 如果您需要同一結構中的這一行,只需使用在索引 0 處插入一個新行。那么您需要轉置矩陣,在 NumPy 中也有一個安全方法。 我只是使用loadtxt的輸出(它是每行的列表列表)作為transpose輸入來給出一個單行。 但是最好將它們分開使用,以避免“火車失事”,並且還能夠看到中間發生的事情並最終糾正不需要的結果。

PS: delimiter參數必須調整為與原始文件中的參數相匹配。 查看loadtxt文檔以獲取更多信息。 我認為它是一個選項卡。 @KostasCharitidis - 感謝您的留言

更新3

st = open('file.txt', 'r').read()

dct = []
species = []

for row in st.split('\n')[0].split(' '):
    species.append(row)


for no, row in enumerate(st.split('\n')[1:]):
    dct.append([])
    for elem in row.split(' '):
        dct[no].append([float(elem)])

print(species)
print(dct)

結果

['O2', 'CO2', 'NOx', 'Ash', 'Other']
[[[20.9], [1.6], [0.04], [0.0002], [0.0]], [[22.0], [2.3], [0.31], [0.0005], [0.0]], [[19.86], [2.1], [0.05], [0.0002], [0.0]], [[17.06], [3.01], [0.28], [0.006], [0.001]]]

文件.txt

O2 CO2 NOx Ash Other
20.9 1.6 0.04 0.0002 0.0
22.0 2.3 0.31 0.0005 0.0
19.86 2.1 0.05 0.0002 0.0
17.06 3.01 0.28 0.006 0.001

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM