使用python在本地电脑上快速处理数据
大数据一般是在“云”上玩的,但“云”都是要钱的,而且数据上上下下的也比较麻烦。所以,在本地电脑上快速处理数据的技能还是要的。 pandas 在比赛中学到的一个工具,本地可以在亿级别的数据上进行聚合等操作。内部的数据包括: 数据的初始化 我们可以通过构造函数来初始化,从下面的代码中可以想象得到数据是样子: from pandas import Series,DataFrame s = Series(data=[1,2,3],index=['a','b','c']) df = DataFrame( data=[ [1,[4,5,6],[7,8,9] ],index=['i1','i2','i3'],columns=['c1','c2','c3'] ) 如果源数据是格式比较好的CSV(或者是自己加工生成的中间数据),可以直接读取: 数据的更新 更新结构 在定义完成之后可以对行、列进行增减(增减数据、修改结构): • 删除列 • df.pop('c1') • 增加行:一般不要动态的增加行,据说新能不高 • df.loc['i4'] = [10,11,12] • 删除行: • df = df.drop('i1',axis=0) 更新数据 我们可以精确修改单个位置的值: 合并数据 数据很多时候分布在不同的DataFrame中,要使用需要将他们进行合并,第一种方式是concat(基础方法): import pandas as pd df1 = pd.DataFrame({'A': ['A0','A1','A2','A3'],'B': ['B0','B1','B2','B3'],'C': ['C0','C1','C2','C3'],'D': ['D0','D1','D2','D3']},index=[0,1,3]) df2 = pd.DataFrame({'A': ['A4','A5','A6','A7'],'B': ['B4','B5','B6','B7'],'C': ['C4','C5','C6','C7'],'D': ['D4','D5','D6','D7']},index=[4,6,7]) result = pd.concat([df1,df2]) 合并完的结果为: A B C D 0 A0 B0 C0 D0 1 A1 B1 C1 D1 2 A2 B2 C2 D2 3 A3 B3 C3 D3 4 A4 B4 C4 D4 5 A5 B5 C5 D5 6 A6 B6 C6 D6 7 A7 B7 C7 D7 其参数含义如下: 另一个相对简化点的操作是append(简化版,好像没啥特别的): 接着来看重点方法merge(将两个表的数据进行融合): import pandas as pd left = pd.DataFrame({'key': ['K0','K1','K2','K3'],'A': ['A0','B3']}) right = pd.DataFrame({'key': ['K0','D3']}) result = pd.merge(left,right,on='key') print(result) 结果为(注意观察与concat不一样的地方): A B key C D 0 A0 B0 K0 C0 D0 1 A1 B1 K1 C1 D1 2 A2 B2 K2 C2 D2 3 A3 B3 K3 C3 D3 方法的参数有: 对应的简化版本为join方法: import pandas as pd left = pd.DataFrame({'A': ['A0','B3']},index=['K0','K3']) right = pd.DataFrame({'C': ['C0','K3']) result = left.join(right) print(result) 输出为: A B C D K0 A0 B0 C0 D0 K1 A1 B1 C1 D1 K2 A2 B2 C2 D2 K3 A3 B3 C3 D3 数据的查询和分析 基本查询 精确查看单个位置数据的方法: 通过切片的操作批量取出数据: 查看某行或某列: 分组 分组(GroupBy)是最最基本的一个分析手段,看个例子: import pandas as pd import numpy as np df = pd.DataFrame({'A': ['foo','bar','foo','foo'],'B': ['one','one','two','three','three'],'C': np.random.randn(8),'D': np.random.randn(8)}) result = df.groupby(['A']) print(result.get_group('foo')) 其他分组形式: 可以对各组进行遍历: for name,group in result: print(name) print(group) 对分组的结果可以过滤:
进一步对各个分组进行计算(结果太直观,就不写了): 利用transform(类似的还有apply)可以对各个分组分别计算: import pandas as pd import numpy as np df = pd.DataFrame(data={ 'A': [1,'B': [4,'C': [7,np.nan,9]}) print(df.groupby('A')['B'].transform(lambda x : x - x.mean())) 输出结果为: 0 -0.5 1 0.5 2 0.0 Name: B,dtype: float64
条件过滤 用一些常用的构造方式,可以有类似SQL的开发效率��: 最后,如果想图形化看在PyCharm里面需要搞个 plt.show() (其他的IDE并不清楚)。 numpy 比较早接触的numpy,总体上来看处理数据比自带类型方便些: 主要集中在数组、矩阵的处理上!是很多工具的基础。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |