我有一个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的文件中。这部分,我不确定该怎么办。
有没有更清洁的方法?
任何帮助将不胜感激。谢谢。
答案 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))