[英]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 - 感謝您的留言
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.