这期内容当中小编将会给大家带来有关使用熊猫怎么对大文件进行计数处理,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
<强>熊猫读取大文件强>
要处理的是由探测器读出的脉冲信号,一组数据为两列,一列为时间,一列为脉冲能量,数据量在千万级,为了有一个直接的认识,先使用熊猫读取一些
import pandas as pd 时间=data pd.read_table (& # 39; filename.txt& # 39;,,迭代器=True) chunk =, data.get_chunk (5)
<>强而输出是这样的:强>
[4]:, 332.977889999979,-0.0164794921875, 0,332.97790,-0.022278, 1,332.97791,-0.026855, 2,332.97792,-0.030518, 3,332.97793,-0.045776, 4,332.97794,-0.032654
<强> DataFram基本用法强>
这里,数据只是个容器,pandas.io.parsers.TextFileReader。
使用astype可以实现dataframe字段类型转换
输出数据中,每组数据会多处一行,因为get_chunk返回的是pandas.core.frame.DataFrame格式,而在数据读取过程中并没有指定dataframe的列,因此在get_chunk过程中,默认将第一组数据作为列。因此需要在读取过程中指定名称即dataframe的列。
import pandas as pd 时间=data pd.read_table (& # 39; filename.txt& # 39;,,迭代器=True,,名字=[& # 39;时间# 39;,,& # 39;能量# 39;]) 时间=chunk data.get_chunk (5), 数据(& # 39;能量# 39;],=,df(& # 39;能量# 39;].astype (& # 39; int # 39;)
<强>输出为强>
[6]:
indextimeenerge0332.97789 - 0.0164791332.97790 0.0222782332.97791 - 0.0268553332.97792 0.0305184332.97793 - 0.045776<强> DataFram存储和索引强>
这里讲一下DataFrame这个格式,与一般二维数据不同(二维列表等),DataFrame既有行索引又有列索引,因此在建立一个DataFrame数据是
DataFrame(数据,列=[“年# 39;,,”月# 39;,,的一天,,, 指数=['一个# 39;,,两个# 39;,,' 3 # 39;])
yearmonthday02010411201152220126332013754201489
而pd。read_table中的名字就是指定DataFrame的列,而指数自动设置。而DataFrame的索引格式有很多
类型说明例子obj (val)选取单列或者一组列
obj.ix (val)选取单个行或者一组行
obj.ix (:, val)选取单个列或列子集
obj。第九(val1, val2)同时选取行和列
重建索引方法将一个或多个轴匹配到新索引
x方法根据标签选取单行或单列,返回一个系列
icol, lrow方法根据整数位置选取单列或单行,返回一个系列
get_value, set_value根据行标签列标签选取单个值
exp:[1]:数据(2):
[2]:
yearmonthday02010411201152
[2]:[数据['月# 39;]在5]
[2]:
yearmonthday22012634201489
如果我们直接把数据拿来比较的话,相当于数据中所有的标量元素
[3]:数据(data<6)=0
[3]:
yearmonthday02010001201100220126032013704201489
<强>熊猫运算强>
series =, data.ix [0] data 安康系列
:
yearmonthday00001111222233344448
DataFrame与系列之间运算会将系列索引匹配到DataFrame的列,然后沿行一直向下广播
如果令series1=数据['年# 39;]
data.sub (series1轴=0)
则每一列都减去该series1,轴为希望匹配的轴,=0行索引,即匹配列,=1列索引,则按行匹配。
<强> DataFrame的一些函数方法强>
这个就有很多了,比如排序和排名;求和,平均数以及方差,协方差等数学方法;还有就是唯一值(类似于集合),值计数和成员资格等方法。
当然还有一些更高级的属性,用的时候再看吧
<强>数据处理强>
在得到数据样式后我们先一次性读取数据
start =, time.time () 时间=data pd.read_table (& # 39; Eu155_Na22_K40_MR_0CM_3Min.csv& # 39;,,名字=[& # 39;时间# 39;,,& # 39;能量# 39;]) 最终获得=,time.time () data.index print (“, time is % f s", %,(最终获得;安康;开始)) 时间=plus 数据(& # 39;能量# 39;】 + [plus & lt;, 0],=, 0
, time is 29.403917, s RangeIndex(=0开始,停止=68319232,,一步=1)
对于一个2 g大小,千万级的数据,这个读取速度还是挺快的。之前使用matlab负载用时160多年代,但是不知道这个是否把数据完全读取了。然后只抽取脉冲信号,将负值归零,因为会出现一定的电子噪声从而产生一定负值。