[英]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.