使用.txt中的列进行计算

时间:2018-07-05 20:00:36

标签: python numpy math

我有一个5列36行的文本文件。我想选择一个特定的列并在计算中使用它。

样本数据:

#1        2         3          4        5     
50.0  0.000E+00  1.386E+16  3.718E+15  261.9   
60.0  0.000E+00  3.929E+15  1.054E+15  247.5   
70.0  0.000E+00  1.043E+15  2.792E+14  227.9   
80.0  3.425E+09  2.425E+14  6.453E+13  212.8  

比方说,我想选择第3、4和5列以将其用作计算。

DataIn = loadtxt('filename.txt')
a = DataIn[:,2:3]
b = DataIn[:,3:4]
c = DataIn[:,4:5]
z = DataIn[:,0:1]

计算:

d = a*1.6
e = b*3.2
f = c*2.8
ave = (d + e + f)/3
h = z/ave

我希望将输出作为列,并将其放入带有z,e,f,ave和h的文件中。这部分,我不确定该怎么办。

有没有更清洁的方法?

任何帮助将不胜感激。谢谢。

3 个答案:

答案 0 :(得分:3)

将数据加载到pandas中不仅可以简化计算,还可以保存更新的文本文件。以下是您的d计算的示例。将数据加载到DataFrame中,执行d的计算,这会向DataFrame添加一个新列,然后创建一个新文件并添加新列。

df = pd.read_csv('filename.txt', sep=' ', header=None, names=['z', 'a', 'b', 'c'])
df['d'] = df['a']*1.6
df.to_csv('new_file.txt')

答案 1 :(得分:0)

为什么要使用包装?如果必须遍历一些数据,我可以这样做:

txtfile = open("filename.txt", "r")
outfile = open("outfile.txt", "w")
for line in txtfile:
    row = line.split("  ")
    z = float(row[0])
    a = float(row[2])
    b = float(row[3])
    c = float(row[4])
    d = a * 1.6
    e = b * 3.2
    f = c * 2.8
    ave = (d + e + f) / 3
    h = z / ave
    outfile.write(str(z) + "\t" +
                  str(e) + "\t" +
                  str(f) + "\t" +
                  str(ave) + "\t" +
                  str(h) + "\n")

答案 2 :(得分:0)

我知道了。谢谢大家的帮助。

z, a , b, c = loadtxt('filename.txt',unpack=True, usecols=[0, 1, 2, 3])

计算:

d = a*1.6
e = b*3.2
f = c*2.8
ave = (d + e + f)/3
h = z/ave

写入文件:

import csv
zip(z, e, q1, f, ave, h)
with open('outfile.txt', 'w') as f:
writer = csv.writer(f, delimiter='\t')
writer.writerows(zip(z, e, q1, f, ave, h))
相关问题