如何操作文件中的数据和排序python

时间:2016-06-09 17:41:17

标签: python sorting

我有一个.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行作为这个新参数的函数进行排序,首先是最小的(最接近中心),依此类推。

有什么建议吗?

1 个答案:

答案 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)'])