大数据一般是在“云”上玩的,但“云”都是要钱的,而且数据上上下下的也比较麻烦。所以,在本地电脑上快速处理数据的技能还是要的。

pandas
在比赛中学到的一个工具,本地可以在亿级别的数据上进行聚合等操作。内部的数据包括:
• Series:一维数组,每个元素有一个标签
• DataFrame:二维表格,可以看做Series的集合
• Panel:三维数据
数据的初始化
我们可以通过构造函数来初始化,从下面的代码中可以想象得到数据是样子:
from pandas import Series, DataFrame
s = Series(data=[1, 2, 3], index=['a', 'b', 'c'])
df = DataFrame(
data=[
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
],
index=['i1', 'i2', 'i3'],
columns=['c1', 'c2', 'c3']
)
如果源数据是格式比较好的CSV(或者是自己加工生成的中间数据),可以直接读取:
df = pandas.read_csv("../volume.csv", header=0)
数据的更新
更新结构
在定义完成之后可以对行、列进行增减(增减数据、修改结构):
• 增加列: • df.insert(3, 'new_column', [4, 7, 10])
• df['c4'] = [4, 7, 10]
• 删除列 • df.pop('c1')
• df = df.drop('c1', axis=1)
• 增加行:一般不要动态的增加行,据说新能不高 • df.loc['i4'] = [10, 11, 12]
• df.loc['i4'] = {'c1': 10, 'c2': 11, 'c3': 12}
• 删除行: • df = df.drop('i1', axis=0)
更新数据
我们可以精确修改单个位置的值:
• df['c1']['i1'] = 77
• df.ix[1, 2] = 66
合并数据
数据很多时候分布在不同的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, 2, 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, 5, 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
其参数含义如下:
• objs :合并的数据(Series、DataFrame)
• axis :合并轴方向,行(0)、列(1)
• join :关联类型(inner、outer)
• join_axes :结果行,eg: pd.concat([df1, df2], axis=1, join_axes=[pd.Int64Index([1, 2, 3])])
• ignore_index :是否忽略objs中传入的索引
• keys :来自不同表的index,每个表一个(ignore_index=True时不管用)
• levels :不同层次的索引
• names :不同层次的索引的名字
• verify_integrity :检查是否包含重复项(有一定的代价)
• copy :是否赋值数据
另一个相对简化点的操作是append(简化版,好像没啥特别的):
result = df1.append(df2)
接着来看重点方法merge(将两个表的数据进行融合):
import pandas as pd
left = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3']})
right = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', '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
方法的参数有:
• left、right :将要进行关联的两个表
• how :关联方式(left、right、inner、outer)
• on :实现关联的列,不传应该是找相同列名
• left_on、right_on :分别为left、right的关联列,在列名不同时使用
• left_index、right_index :是否用索引来关联
• sort :排序
• suffixes :后缀
• copy :是否复制数据
对应的简化版本为join方法:
import pandas as pd
left = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3']},
index=['K0', 'K1', 'K2', 'K3'])
right = pd.DataFrame({'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']},
index=['K0', 'K1', 'K2', '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
数据的查询和分析
基本查询
精确查看单个位置数据的方法:
• df['c1']['i1']
• df.loc['i1']['c1'] (先行后列)
• df.iloc[1] (下标操作)
• df.ix['i1'][1] 或 df.ix[0, 2] (随意使用下标或名称)
通过切片的操作批量取出数据:
• df.loc['i1':'i2', ['c1', 'c2']]
• df.iloc[1:3, [1, 2]]
• df.ix[1:3, 0:2]
查看某行或某列:
• 行: df.loc['i1']
• 列: df['c1']
分组
分组(GroupBy)是最最基本的一个分析手段,看个例子:
import pandas as pd
import numpy as np
df = pd.DataFrame({'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
'C': np.random.randn(8),
'D': np.random.randn(8)})
result = df.groupby(['A'])
print(result.get_group('foo'))
其他分组形式:
• df.groupby('A')
• df.groupby(['A', 'B'])
• df.groupby(group_func, axis=1)
• df.groupby(level=0)
• df.groupby([pd.Grouper(level=0), 'A'])
可以对各组进行遍历:
for name, group in result: print(name) print(group)
对分组的结果可以过滤:
df.groupby('A').B.filter(lambda x : len(x) > 1)
进一步对各个分组进行计算(结果太直观,就不写了):
• df.groupby(['A', 'B']).sum()
• df.groupby(['A', 'B']).sum().reset_index()
• df.groupby(['A', 'B']).aggregate(np.sum)
• df.groupby(['A', 'B']).agg(np.sum)
• df.groupby(['A', 'B']).agg([np.sum, np.mean])
• df.groupby(['A', 'B']).agg([np.sum, np.mean]).rename(columns={'sum': 's', 'mean': 'm'})
• df.groupby(['A', 'B']).agg({'C': np.sum, 'D': np.mean})
• df.groupby(['A', 'B']).agg({'C': 'sum', 'D': 'mean'})
利用transform(类似的还有apply)可以对各个分组分别计算:
import pandas as pd
import numpy as np
df = pd.DataFrame(data={
'A': [1, 1, 3],
'B': [4, 5, 6],
'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
类似的,可以在分组上使用窗口函数:
• rolling
• resample
• expanding
条件过滤
用一些常用的构造方式,可以有类似SQL的开发效率��:
• tips[tips['time'] == 'Dinner'].head(5)
• tips[(tips['time'] == 'Dinner') & (tips['tip'] > 5.00)]
• tips[(tips['size'] >= 5) | (tips['total_bill'] > 45)]
• frame[frame['col2'].isnull()]
• frame[frame['col1'].notnull()]
最后,如果想图形化看在PyCharm里面需要搞个 plt.show() (其他的IDE并不清楚)。
numpy
比较早接触的numpy,总体上来看处理数据比自带类型方便些:
• np.array([[1, 2, 3, 4],[4, 5, 6, 7], [7, 8, 9, 10]])
• np.array((5, 6, 7, 8))
主要集中在数组、矩阵的处理上!是很多工具的基础。
# python
# 处理数据
# pandas
# pandas使用
# 用Python编程实现语音控制电脑
# python如何实现远程控制电脑(结合微信)
# python编写微信远程控制电脑的程序
# Python获取电脑硬件信息及状态的实现方法
# 打开电脑上的QQ的python代码
# python实现简单socket程序在两台电脑之间传输消息的方法
# Python语言编写电脑时间自动同步小工具
# python+tkinter编写电脑桌面放大镜程序实例代码
# Python简单实现控制电脑的方法
# 以对
# 我们可以
# 不同层次
# 都是
# 是在
# 就不
# 遍历
# 其他的
# 有一定
# 不高
# 比较好
# 或者是
# 可以直接
# 写了
# 分别为
# 自带
# 看在
# 第一种
# 要使
# 没啥
相关文章:
网站按钮制作软件,如何实现网页中按钮的自动点击?
制作农业网站的软件,比较好的农业网站推荐一下?
微信推文制作网站有哪些,怎么做微信推文,急?
如何彻底卸载建站之星软件?
英语简历制作免费网站推荐,如何将简历翻译成英文?
临沂网站制作企业,临沂第三中学官方网站?
建站之星如何助力企业快速打造五合一网站?
开封网站制作公司,网络用语开封是什么意思?
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
如何用AWS免费套餐快速搭建高效网站?
建站之星价格显示格式升级,你的预算足够吗?
建站主机与虚拟主机有何区别?如何选择最优方案?
交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?
微课制作网站有哪些,微课网怎么进?
全景视频制作网站有哪些,全景图怎么做成网页?
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
Android自定义控件实现温度旋转按钮效果
,怎么在广州志愿者网站注册?
如何在搬瓦工VPS快速搭建网站?
宝塔建站助手安装配置与建站模板使用全流程解析
番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?
高端智能建站公司优选:品牌定制与SEO优化一站式服务
如何通过FTP服务器快速搭建网站?
php8.4新语法match怎么用_php8.4match表达式替代switch【方法】
如何在IIS中新建站点并解决端口绑定冲突?
PHP正则匹配日期和时间(时间戳转换)的实例代码
网站微信制作软件,如何制作微信链接?
网站app免费制作软件,能免费看各大网站视频的手机app?
如何高效生成建站之星成品网站源码?
哈尔滨网站建设策划,哈尔滨电工证查询网站?
如何通过VPS建站无需域名直接访问?
公司网站制作价格怎么算,公司办个官网需要多少钱?
北京的网站制作公司有哪些,哪个视频网站最好?
如何在Golang中使用encoding/gob序列化对象_存储和传输数据
深圳企业网站制作设计,在深圳如何网上全流程注册公司?
如何用花生壳三步快速搭建专属网站?
股票网站制作软件,网上股票怎么开户?
如何在Golang中使用replace替换模块_指定本地或远程路径
智能起名网站制作软件有哪些,制作logo的软件?
电脑免费海报制作网站推荐,招聘海报哪个网站多?
微信小程序 input输入框控件详解及实例(多种示例)
相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?
,sp开头的版面叫什么?
行程制作网站有哪些,第三方机票电子行程单怎么开?
css网站制作参考文献有哪些,易聊怎么注册?
安云自助建站系统如何快速提升SEO排名?
如何在宝塔面板中修改默认建站目录?
上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?
中山网站推广排名,中山信息港登录入口?
如何确保西部建站助手FTP传输的安全性?
*请认真填写需求信息,我们会在24小时内与您取得联系。