机器学习数据科学库2——pandas1
目录
使用ipython演示
创建pandas对象
创建序列
创建一个日期序列
创建二维数组
查看数据
选择数据
添加列
使用ipython notebook演示
处理丢失数据
数据运算
数据合并
数据分组
数据整形
数据透视
时间序列
类别数据
画图
数据读写
使用ipython演示
import pandas as pd
import numpy as np
创建pandas对象
创建序列
Series在pandas里面是一个序列
s=pd.Series([1,3,5,np.NaN,8,4]) NaN :空值
创建一个日期序列
dates=pd.date_range('20160301',periods=6) 包括起始日期20160301,一共6个日期
创建二维数组
方法1:data=pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD')) 创建一个6行4列的随机数组,索引的行是上面设置的dates,列是ABCD
得出数组:
方法2:
d={'A':1,'B':pd.Timestamp('20130301'),'C':range(4),'D':np.arange(4)}
df=pd.DataFrame(d)
查看数据
df.dtypes 访问所有列的数据类型
df.A 访问A列的值
data.head() 默认访问前五行数据,括号内输入数字可以决定访问前几行
data.tail() 访问后面几行
data.index 行标签
data.columns 列标签
data.values 访问值
data.describe() 看到数组的一些特征,比如平均值最大值最小值方差
data.T 转置
data.shape 行数列数
data.sort_index(axis=1) 按列标签排序,升序
data.sort_index(axis=1,ascending=False) 降序
data.sort_values(by='A') 按A列排序
选择数据
data.A 或者data['A'] 选取A列
data[2:4] 选取2到4行
data['20160302':'20160305'] 按行标签选
data.loc['20160302':'20160305'] 相比较上面而言效率高,因为loc只识别行或者列标签 data.loc[2:4] 报错
data.iloc[2:4] 可以,只能识别内置标签,不识别行列
data.loc['20160302':'20160305',['B','C']] 选取某几行某几列
data.at[pd.Timestamp('20160302'),'B'] 效率高,但是只能识别数据原类型如果data.at['20160302','B'] 报错
data.iloc[1:1] 精确访问某个元素 data.iat[1:1]效率更高
添加列
tag=['a']*2+['b']*2+['c']*2
data['TAG']=tag
data[data.TAG.isin(['a','c'])] 按TAG列的a和c值检索
data.iat[0,0]=100 更改某个位置的值
data.A=range(6)
data.B=200 如果这个列所有数值都是一样(标量)可以,会把所有值都改为200 如果这个列各行数值不一样,赋值的个数不匹配就会报错
data.iloc[:,2:5]=100 可以把这个选取的子表所有值都改为100,这个是可以的,也可以赋值为一个行列数相等的子表,来替换原有数据
使用ipython notebook演示
处理丢失数据
%matplotlib inline 图形直接在网页显示出来
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df1=df.reindex(index=dates[0:4],columns=list(df.columns)+['E'])
df1=loc[dates[1:3],'E']=2 将2和3行第E列的两个值赋值为2,E列其他值为NaN
df1.dropna() 把含有空值的行删除
df1.fillna(value=5) 把空值补充为5
pd.isnull(df1) 得到一个布尔值表格,判断是否为空
pd.isnull(df1).any() 简化为每一列是否有空数据
pd.isnull(df1).any().any() 进一步简化为这个数组是否有空数据
数据运算
df1.mean() 默认按列求平均值,df1.mean(axis=1)按行求平均值
df1.cumsum() 默认按列累加,得到新的数组,空值不参与计算
df1.sub(s,axis='index') 假设设置一个新数组s,以行标签为依据,df1的每一个单元格减去s对应的单元格数据,如果两个数组行列数不等,就有空值补齐,如果某个单元格为空值则不参与计算,该单元格计算结果显示为空值
因为空值不参与计算,一般都是先删除或者补齐空值再进行计算
df.apply(np.cumsum) 按列来累加 apply是对列进行操作的
df.apply(lambda x : x.max()-x.min()) 每列最大值减去最小值
数据合并
df1=pd.concat([df.iloc[:3],df.iloc[3:7],df.iloc[7:]]) 合并数组
df1==df 可以得到一个布尔值数组,比较两个数组每个位置是否一样
(df1==df).all() 每列是否一样
(df1==df).all().all() 整个表格是否一样
通过外键关联合并两个数组:
首先以字典的形式创建两个数组
left=pd.DataFrame({'key':['foo','foo'],'lval':[1,2]})
key | lval | |
---|---|---|
0 | foo | 1 |
1 | foo | 2 |
right=pd.DataFrame({'key':['foo','foo'],'rval':[4,5]})
key | rval | |
---|---|---|
0 | foo | 4 |
1 | foo | 5 |
pd.merge(left,right,on='key')
key | lval | rval | |
---|---|---|---|
0 | foo | 1 | 4 |
1 | foo | 1 | 5 |
2 | foo | 2 | 4 |
3 | foo | 2 | 5 |
另一种插入数组的方式:
df.append(s,ignore_index=True)
在df中添加s,不会改变原有的数组,只是生成一个copy
数据分组
df.groupby('A').sum() 按照A列的标签分类,并在每一行对应的列标签下进行分别求和
df.groupby(['A','B']).sum() 先按照A分组,再按照B分组,如果['B','A']结果是不一样的
数据整形
stacked=df.stack() 把列索引变成行索引,也是创建一个新数组
stacked.unstack() 恢复上一次的列索引
stacked.unstack().unstack() 把行索引转换为列索引,如果行索引有两层,先把第二层行索引转换为列索引
数据透视
只看一部分数据
df.pivot_table(value=['D'], index=['A','B'], columns=['C']) 选取AB两个列标签作为行索引,C列标签作为列索引,看D列的值
时间序列
rng=pd.date_range('20160301', periods=600, freq='s')
s=pd.Series(np.random.randint(0,500,len(rng)), index=rng)
s.resample('2Min', how='sum') 采样,每两分钟以求和的方式采样 sum可以改为mean,以平均值的方式采样
除了以date和秒s创建时间序列,也可以以季度为单位:
rng=pd.period_range('2000Q1','2016Q1', freq='Q')
rng.to_timestamp() 转换为日期的格式
pd.Timestamp('20160301')- pd.Timestamp('20160201') 可以进行日期计算
类别数据
df('grade')=df.raw_grade.astype('category') 创建新的一列“grade”,类型是category
df.grade.cat.categories=['very good', 'good', 'bad'] 可以对这一列的内容进行重命名,可以替换原有的内容
但是,如果以grade列进行排序,还是以原内容进行排序
画图
s.plot()
数据读写
df.to_csv('data.csv') 写入磁盘
%ls 查看位置
%more data.csv 看内容
pd.read_csv('data.csv') 读取磁盘中文件内容
pd.read_csv('data.csv', index_col=0) 如果不加index_col=0,会默认把之前的索引序列作为一列值,这里加了之后就把0列作为索引,这样读出来就跟之前写的数据一样
机器学习数据科学库2——pandas1相关推荐
- 机器学习-数据科学库-day6
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 机器学习-数据科学库-day6 pandas学习 动手练习 pandas中的时间序列 生成一段时间范围 关于频率的更多缩写 在Data ...
- 机器学习-数据科学库-day5
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 机器学习-数据科学库-day5 pandas学习 pandas之DataFrame pandas常用统计方法 将字符串离散化 数据合并 ...
- 机器学习-数据科学库-day1
机器学习-数据科学库-day1 机器学习-数据科学库-day1 matplotlib 机器学习-数据科学库-day1 数据分析课程包括: 基础概念与环境 matplotlib numpy pandas ...
- 机器学习-数据科学库:matplotlib绘图
机器学习-数据科学库:matplotlib绘图 matplotlib绘图 matplotlib折线图 matplotlib散点图 matplotlib条形图 matplotlib直方图 对比常用统计图 ...
- 机器学习-数据科学库:Pandas总结(1)
机器学习-数据科学库:Pandas总结(1) Pandas pandas的常用数据类型 pandas之Series创建 pandas之Series切片和索引 pandas之读取外部数据 pandas之 ...
- HuaPu在学:机器学习——数据科学库【matplotlib】
数据科学库[matplotlib] 文章目录 数据科学库[matplotlib] 前言 一.数据分析介绍及环境安装 1.为什么要数据分析??? 2.环境安装 二.matplotlib 1.为什么学习m ...
- 机器学习-数据科学库(第三天)
14.numpy的数组的创建 什么是numpy 一个在Python中做科学计算的基础库,重在数值计算,也是大部分PYTHON科学计算库的基础库,多用于在大型.多维数组上执行数值运算(数组就是列表.列表 ...
- 机器学习-数据科学库(第六天)
37.pandas时间序列01 现在我们有2015到2017年25万条911的紧急电话的数据,请统计出出这些数据中不同类型的紧急情况的次数,如果我们还想统计出不同月份不同类型紧急电话的次数的变化情况, ...
- 机器学习-数据科学库(第五天)
31.数据的合并和分组聚合--字符串离散化的案例 字符串离散化的案例 刚刚我们学会了数据分合并,那么接下来,我们按照电影分类(genre)信息把数据呈现出来 import numpy as np im ...
最新文章
- nb-iot_如何使用语音通过Android控制IoT设备
- ZOJ1563 (动态规划)
- 语言 山东专升本 真题_专升本英语真题
- Spark SQL之queryExecution运行流程解析Logical Plan(三)
- 热浪(信息学奥赛一本通-T1379)
- CodeForces 698A - Vacations (Codeforces Round #363 (Div. 2))
- idea插件安装在哪个目录_从零开始编写自己需要的IntelliJ IDEA 插件
- 高等数学复习笔记(三)- 中值定理
- 我看了全部文件的字符串资源
- C++ list 基础用法合集;list 增减元素 list删除某一个元素 遍历list
- knockout.js的学习笔记3
- 深信服 云桌面 linux,深信服桌面云-深信服桌面云下载 v3.0官方版--pc6下载站
- 移动硬盘计算机管理无法显示,移动硬盘不显示怎么办
- Shell脚本介绍(资源)
- 提高网络营销的转化只需掌握这四步
- C++知三角形三边求面积
- setAttribute的具体用法
- 你看到的都是招数,不是内功
- [转自mop]各大高校BBS上的100个爆笑的签名档
- HTML怎么把图片颜色加深,怎么把Photoshop的图片整体颜色加深?