我有一个.dat文件,里面有这些信息(但真实的文件有线条):
n a (au) k0 k1 P1 k2
1 3.156653 2 3 5 -18
2 3.152517 2 5 5 -23
3 3.154422 3 -18 5 29
4 3.151668 3 -16 5 24
5 3.158629 5 -19 5 21
6 3.156970 5 -17 5 16
7 3.155314 5 -15 5 11
8 3.153660 5 -13 5 6
9 3.152007 5 -11 5 1
10 3.150357 5 -9 5 -4
我按以下方式加载数据:
import numpy as np
import matplotlib.pyplot as plt
from pylab import *
n = array([])
a = array([])
k0 = array([])
k1 = array([])
p1 = array([])
k2 = array([])
p2 = array([])
l = np.loadtxt('pascal.dat', skiprows=1, usecols=(0,1,2,3,4,5)).T
n=append(n,l[0])
a=append(a,l[1])
k0=append(k0,l[2])
p1=append(p1,l[3])
k1=append(k1,l[4])
p2=append(p2,l[5])
我想使用列的值" a(au)"计算" n"的每个元素的距离。来自给定中心的列,因此:
center = 3.15204
for i in range(len(n)):
distance = abs(center-a[i]))
好吧,现在我想重新编写.dat文件,考虑到距离的值。因此,我想添加一个名为" distance"然后我想将所有n行作为这个新参数的函数进行排序,首先是最小的(最接近中心),依此类推。
有什么建议吗?
答案 0 :(得分:2)
我建议使用pandas库。以数据帧的形式读取.dat文件 - 它是一个非常强大的工具,您可以通过它来操作数据,添加列等。
import pandas as pd
with open('../pascal.dat') as f:
df = pd.Dataframe(f)
center = 3.15
df['distance'] = abs(3.15 - df['a (au)'])