在我们的工作中,无论我们是什么岗位,总需要与数据打交道,少至几行的统计表,多到几千万、上亿条的记录。这么多复杂的数据需要进行处理,那么怎么进行数据规整呢?目前的数据规整主要集中在数据的重排、过滤、清理和其它转换工作。
那么,有一定规模的数据处理用什么呢,还是用python较为便捷。Python提供了较为方便的数据处理和计算的库pandas,它是基于Numpy的科学计算库,与Sciket-learn一起几乎提供了数据分析所需要的全部计算工具。本文重点介绍一下数据处理部分要用到的pandas.
首先,需要引入pandas:
import pandas as pd
pandas的基本数据结构是Series和DataFrame:
1、Series
Series是带有索引的一位数组,我们可以使用pd.Series()方法创建一个Series,如:
Series1=pd.Series([1,3,5,-7]),或者Series=pd.Series([1,3,5,-7], index=[‘0’,’1’,’2’,’3’])
这说明pandas中既可以使用默认的索引,也可以重新索引。Series1输出就是:
0 1
1 3
2 5
3 -7
左边是Series1.Index,右边是Series1.values
2、DataFrame
DataFrame是不同数据类型的列组成的二维结构表,可以使用pd.DataFrame来创建。当然,我们常用的还是从外部文件读取,例如,pd.read_csv(),pd.read_excel(),或者pd.read_sql等。
data={‘year’:[2010,2011,2012],’pop’:[97,101,112]}
Obj=DataFrame(data)
3、索引
那怎么取数据?pandas的索引非常方便。Series可以使用Series1[1]取到index=1这一行,也可以Series1[:2]取到前两行,或者通过布尔索引,Series1[Series1>0]取到值满足为正数的前三行(仍然是Series类型)。
DataFrame类似,可以直接通过布尔型的DataFrame进行索引,如DataFrame[Obj [‘pop’]<100]=0直接给’pop’小于100的行的值重新定义。
下面列出DataFrame的索引选项:
类型
说明
Obj[val]
选取DatFrame的单列
Obj.ix[val]
选取DatFrame的单行或一组行
Obj.ix[:,val]
选取DatFrame的单列,或列子集
Obj.ix[val1,val2]
同时选取行和列
reindex方法
将一个或多个轴匹配到新索引
xs方法
根据标签选取单行或单列,返回Series
icol,irow方法
根据整数位置选取单行或单列,返回Series
get_value、set_value方法
根据行标签和列标签选取单个值
另外,panas支持层次化索引,也就是在一个轴上有两个及以上的索引级别,比如“year”和”month“,例如Series2=pd.Series([1,3,5,-7], index=[[‘2015’,’2015’,’2016’,’2016’],['1','2','1','2']]),索引选取数据的方法类似。
4、自动数据对齐和算术运算
有了快速索引的方法,下面我们就可以对不同的索引对象进行算术运算。pandas的一个重要的特点就是会不同的索引进行自动对齐,并像sql里的FULL JOIN 一样返回索引的并集,在不重叠的索引部分自动填充NA值。例如:
s1=pd.Series([1,3,5], index=[‘a’,’b’,’c’])
s1=pd.Series([11,13,15], index=[‘a’,’b’,’d’])
那么s1+s2结果为:
a 12.0
b 16.0
c NA
d NA
同时,pandas提供了丰富的方法,用来对Series和DataFrame进行增改、排序、计算,尤其在进行数组运算和矩阵运算时。增改可以直接通过索引来定义,例如:
s1['e']=7,就在s1的末尾增加了一个值;
排序使用sort_index方法,例如obj.sort_index(by='year')是按照年份进行排序;
计算的函数如count,min,max,mean,describe,var,std等描述性统计,还有偏度skew,峰度kurt,累积和cumsum,累计最大值cummax等,不再赘述。
最后,推荐大家可以参考《利用Python进行数据分析》。