一个简单的数据筛选脚本

前言:确实是个基于Python,很简单的脚本。不过,正因为我没有系统的学过Python,所以还是花了我半天的时间。路过一些坑以后,决定写这样一篇博客记录一下今天学到的一些知识点,以防忘记,另外还有一个问题我不知道有没有办法解决,有知道的希望不吝赐教。

任务需求

一个模拟星系演化的程序跑完以后,留下了很多的数据,其中有个记录黑洞活动情况的数据。这个黑洞活动情况基于光度有没有超过爱丁顿光度的2%分为cold model(有)和hot model(没有),这两种model对wind和辐射的能量输出计算要用不同的公式所以最好把原始数据一分为二,放到两个单独的数据文件中,方便后面进一步的处理。

实现步骤

  1. 载入原始数据
  2. 循环比较每一行的爱丁顿光度
  3. 输出到新的文件中

我的代码

import numpy as np

data = np.loadtxt('zmp_usr',skiprows=1)
data_cold = np.zeros((1,5))
data_hot = np.zeros((1,5))

for i in range(0,390000):   #pay attention to the num
    if data[i,2] > 0.02:
        data_cold = np.append(data_cold,[data[i,:]],axis=0)
    else:
        data_hot = np.append(data_hot,[data[i,:]],axis=0)

data_cold = np.delete(data_cold, 0, axis=0)
data_hot = np.delete(data_hot, 0, axis=0)

np.savetxt('data_cold',data_cold)
np.savetxt('data_hot',data_hot)

说明

  1. 跳过第一行载入原始数据:np.loadtxt('zmp_usr',skiprows=1)
  2. 给新的数组一个初始值:data_cold = np.zeros((1,5)) #曾经试过np.expty(),但这个给出的是随机数不是真的空的。用这个就元素都是0
  3. 在新数组后添加新的一行: data_cold = np.append(data_cold,[data[i,:]],axis=0) #axis=0代表的是添加行,=1代表添加列,=None代表接上去(会变成一维数组)
  4. 删去第一行:data_cold = np.delete(data_cold, 0, axis=0) #就是删去我们给的初始值
  5. 输出到txt文件:np.savetxt('data_cold',data_cold)
  6. 其实我一直在想有没有逐行输出到txtx文件的方式,能和np.savetxt()一样简单的
  7. 循环390,000次,因为打开数据看了看大概有390,000+行数据吧,不知道有没有一种直接到头的表达方式就像All这样的,试过All不行,也没看到文章写。

一些参考

都是网上找资料的时候屯的,Python有没有比较好的手册,教材推荐呢……

分支语句:http://www.runoob.com/python/python-if-statement.html

删除整行整列:https://www.jb51.net/article/139764.htm

保存数组到txt文件:https://blog.csdn.net/kaever/article/details/61420696

逐行写入数据(觉得挺麻烦的):https://www.cnblogs.com/zengcv/p/6872113.html

另一种输出方法:http://www.cnblogs.com/shenckicc/p/7010948.html

numpy数组基本操作:https://www.jb51.net/article/136333.htm https://blog.csdn.net/lsylsy726/article/details/82899571

数组说明:https://blog.csdn.net/qzc70919700/article/details/72983513

数组拼接方法:https://blog.csdn.net/zyl1042635242/article/details/43162031

numpy.append()里的axis的用法详解 :https://www.codingke.com/article/3205

01-02 22:01