美文网首页
python 数据长度对齐

python 数据长度对齐

作者: YuAllon | 来源:发表于2019-06-19 15:52 被阅读0次

    写在前面的话:

    最近导师让我统计一下对于一个AGN样本,它的WISE的颜色是如何分布的?为了获取一个AGN样本,我从SDSS天文数据网站下载了DR14释放的数据,其中被归类为QSO的源我当作一个AGN样本。如果单个源去WISE上面下载,用时角坐标或以度为单位的坐标都行。然而,如果想以列表的形式一次性下载多个源的WISE数据,必须采用以度为单位,列表格式也有特定的要求。而列表格式的特定要求直接反映在如何取数据的精度问题上。尝试了诸多方法后最终成功,现记录如下。

    WISE格式解读:

    以txt文档方法一次性输入多个源坐标,格式要求见下图:

    Screen Shot 2019-06-19 at 14.19.15.png
    前面6行是必须有的(自己杜撰的,但是输入格式必须有这6行),而且这6行的竖线|的间距是不可更改,所有的输入的数据还必须满足都在两个竖线|的间隔内(在轴向数字也不能与竖线|重叠),但是只要在两个竖线|内,数字精度(长度)为多少不做要求。
    1. 既然数据在轴向不能与竖线|重叠,首先要保证每一行数据(ra)首端必须有一个空格的缩进,那该如何保证每一行ra末端在第二个竖线|内,且dec数据也满足前面要求呢?
    2. 因为竖线|之间的间隔是不可变的,所以意味着两个竖线|之间容纳的数字个数是有一个上限的,即有一个\color{red}{最大值}。经验证,这个最大值为11。\color{blue}{所以只要每一行ra的长度为11}\color{blue}{再加两个空格符号}\color{blue}{再输入一个长度为11的dec数据}\color{blue}{即可满足WISE的要求}
    3. 如何保证ra,dec的数据长度呢?自然而然想到的便是\color{red}{数据精度}

    数据精度:

    要给出数据精度,首先想到的便是\color{red}{round()函数}\color{red}{字符串格式化}

    round()函数:

    语法(Syntax):

    round(number, number of digits)
    
    参数 含义
    number 待round的数
    number of difits 如果没有,对number四舍五入取整,如果有比如3,四舍五入取小数点后3位,后面有零(0)舍掉

    第二个参数看起来有点晕,直接看例子:

    #没有第二个参数,四舍五入取整
    round(1.234)
    1
    #第二个参数为3,保留小数点后3位,而且四舍五入后第3位不是0
    round(1.2355,3)
    1.236
    #rounded后,四舍五入后第3位是0,舍掉
    round(1.23005,3)
    1.23
    #保留的小数点后的位数超出数字长度,则直接输入原number,后面不自动添0
    round(1.23005,11)
    1.23005
    

    字符串格式化:

    关于字符串格式化的介绍可以参考我这篇文章:字符串格式化

    b = '%011.7f' % 1.35003
    b
    '001.3500300'
    len(b)
    11
    

    可见,字符串格式化不仅可以满足长度为11,而且如果原数字长度小于11,还可以向前向后自动补零。

    代码如下:

    #这篇代码是针对利用WISE搜索目标源时,如何输出WISE要求的列表格式
    
    
    #首先这些初步的数据源来自SDSS DR14 QSO,fits格式
    from astropy.io import fits
    #import pandas as pd
    
    #读取头文件信息
    hdulist = fits.open('/Users/huangyulong/Desktop/sdss_qso/DR14Q_v4_4.fits')
    #数据在hdulit[1]中存放
    data = hdulist[1].data
    
    #提取出源的RA,DEC,和红移Z的信息
    ra = data['RA']
    dec = data['DEC']
    z = data['Z']
    #
    file = open('ex211111.txt','w')
    i = 0
    while i < len(data):
        a = ra[I]
        b = dec[I]
        a1 = '%011.7f' % a
        b1 = '%011.7f' % b
        file.write(' ' + a1 + ' ' + b1 + '\n')
        i += 1
    file.close()
    

    结果:

    Screen Shot 2019-06-19 at 15.51.13.png

    最后的头文件是加上去的。完美在所有竖线|的下面!!!!
    2019-06-19

    相关文章

      网友评论

          本文标题:python 数据长度对齐

          本文链接:https://www.haomeiwen.com/subject/udahqctx.html