转置水平数据并保存

时间:2017-07-15 15:15:34

标签: python file numpy

我有一个简单的代码,其想法是打开一个六列文件,选择一列并保存。我面临的问题是我不断获得水平排列的数据。当我试图转置它们时,我得到了一个更奇怪的输出,看起来像

[number1, number2, number3, ..., number4, number5, number6]

虽然一列中有一百万个点。我怎样才能解决这个问题呢?

import numpy as np

filename = "C:\\Users\\blablabla.dat"
col_sep = "\t"

col_1 = []

with open(filename,'r') as f:
    for line in f:
        if line[0] != "#":
            linedata = [float(line.split(col_sep)[i]) for i in range(len(line.split(col_sep)))]
            col_1.append(linedata[4])

tr = np.transpose(col_1)

s = str(tr)
c = open("C:\\Users\\blablabla1.dat", "w")
c.write(s)
c.close()

4 个答案:

答案 0 :(得分:0)

那么,您是尝试从文件中提取一列并将其保存到另一个文件中?

这应该这样做:

=SWITCH(
    Fields!Factors.Value = "Touched Leads", "SCPL",
    Fields!Factors.Value = "TOTAL", "Disposition",
    True, Nothing
)

程序中名为filename = "C:\\Users\\blablabla.dat" col_sep = "\t" col_1 = [] with open(filename, 'r') as f: for line in f: if line[0] != "#": col_1.append(float(line.split(col_sep)[4])) with open("C:\\Users\\blablabla1.dat", "w") as f: for val in col_1: f.write("%f\n" % val) 的{​​{1}}没有附加方向,既不是水平的,也不是垂直的;它只是一个值列表。您使用特定列的值填充它,逐行读取文件并手动解析。要将其保存为列,您必须以相同的方式迭代它并为每行写入一个值。

另外,只是揭开正在发生的事情的神秘面纱; list对您的一维数据没有任何效果,只需返回col_1(向量)来自np.transpose的数据。 np.array上的list返回了一个人类可读的字符串表示形式str,您将其写入输出文件。

答案 1 :(得分:0)

您可以在将其转换为数组后添加维度,而不是使用np.transpose(这是1D数据的无操作):

tr = np.array(col_1)[:, None]  # instead of "tr = np.transpose(col_1)"

例如:

>>> np.array([1,2,3,4,5,6])[:, None]
array([[1],
       [2],
       [3],
       [4],
       [5],
       [6]])

还有其他几种方法可以改进您的代码,但这种更改应该可以解决问题。 :)

例如,numpy.loadtxt可用于以更直接的方式提取列:

# to extract the fifth column of a csv file:
tr = np.loadtxt(filename, delimiter=col_sep, comments='#')[:, 4][:, None]  

答案 2 :(得分:0)

file.write('\n'.join([str(_) for _ in col_1]) + '\n')可能适合您。

顺便说一句numpy.ndarray个对象无法直接写入文件,请尝试使用numpy.savetxt()

答案 3 :(得分:0)

使用numpy.loadtxt()将整个输入表读入numpy数组,然后使用numpy.savetxt将各列保存为不同输出文件中的列,例如:

import numpy as np
data = np.loadtxt(filename).T
output_filenames = ['file1.txt', 'file2.txt', 'file3.txt', ...] # add 3 more names
for col, fn in zip(data, output_filenames):
    np.savetxt(fn, col)