pandas学习(数据分组与分组运算、离散化处理、数据合并)
pandas学习(数据分组与分组运算、离散化处理、数据合并)
目录
数据分组与分组运算 离散化处理
数据合并
数据分组与分组运算
GroupBy技术:实现数据的分组,和分组运算,作用类似于数据透视表 数据分组--〉归纳
程序示例:
import numpy as np
import pandas as pd
# 读入数据
df=pd.read_csv('data1.txt')
print('原始数据')
print(df) #返回一个对象 group=df.groupby(df['产地']) #计算分组后的各个统计值
print('根据产地进行分组')
print(group.mean())
print(group.sum()) # 只计算某列的结果
print('根据年代进行分组,然后统计每一个年代的平均评分')
print(df['评分'].groupby(df['年代']).mean()) #根据多个分组变量进行分组
print('多个分组变量进行分组')
print(df.groupby([df['产地'],df['年代']]).mean()) #获得每一个地区,每一年的电影的评分的均值
print('多个分组变量进行分组之操作某列')
print(df['评分'].groupby([df['产地'],df['年代']]).mean())
运行结果:
原始数据
名字 投票人数 类型 产地 上映时间 时长 年代 评分
0 美丽人生 42995 剧情/喜剧/爱情 意大利 1997-12-20 116 1997 9.5
1 阿甘正传 580897 剧情/爱情 美国 1994-06-23 142 1994 9.4
2 肖申克的救赎 692795 剧情/犯罪 美国 1994-09-10 142 1994 9.6
3 控方证人 42995 剧情/悬疑/犯罪 美国 1957-12-17 116 1957 9.5
4 霸王别姬 478523 剧情/爱情/同性 中国大陆 1993-01-01 171 1993 9.4
根据产地进行分组
投票人数 时长 年代 评分
产地
中国大陆 478523.000000 171.000000 1993.000000 9.4
意大利 42995.000000 116.000000 1997.000000 9.5
美国 438895.666667 133.333333 1981.666667 9.5
投票人数 时长 年代 评分
产地
中国大陆 478523 171 1993 9.4
意大利 42995 116 1997 9.5
美国 1316687 400 5945 28.5 根据年代进行分组,然后统计每一个年代的平均评分
年代
1957 9.5
1993 9.4
1994 9.5
1997 9.5
Name: 评分, dtype: float64 多个分组变量进行分组
投票人数 时长 评分
产地 年代
中国大陆 1993 478523 171 9.4
意大利 1997 42995 116 9.5
美国 1957 42995 116 9.5
1994 636846 142 9.5 多个分组变量进行分组之操作某列
产地 年代
中国大陆 1993 9.4
意大利 1997 9.5
美国 1957 9.5
1994 9.5
Name: 评分, dtype: float64
离散化处理
#在实际的数据分析项目中,对有数据属性,我们往往并不是关注数据的绝对数值,只关注它所处的区间或者等级
# 比如,我们可以把评分9分及以上的电影定义为A,7到9分为B,5到7分定义为C,3到5分定义为D,小于3分定义为E
#离散化也被称为分组,区间化
#pandas为我们提供了方便的函数cut()
# pandas.cut( x , bins , right=True , labels=None , retbins=False , precision=3 , include_lowest=False,duplicates='raise')
# 参数说明:
#
# x : 进行划分的一维数组;
# bins :如果是整数---将x划分为多少个等间距的区间,如代码一;
# bins :如果是序列,则将x划分在指定的序列中,若不在该序列中,则是NaN ,如代码二;
# right : 是否包含右端点;
# labels : 是否用标记来代替返回的bins,如代码三;
# retbins: 是否返回间距bins,如果retbins = False 则返回x中每个值对应的bin的列表,否者则返回x中每个值对应的bin的列表和对应的bins;
# precision: 精精度;
# include_lowest:是否包含左端点;
程序示例:
import numpy as np
import pandas as pd
# 读入数据
df=pd.read_csv('data1.txt')
print('原始数据')
print(df)
data=pd.cut(df['评分'],[0,3,5,7,9,10],labels=['E','D','C','B','A'])
print(data)
df['等级']=data
print(df)
运行结果:
原始数据
名字 投票人数 类型 产地 上映时间 时长 年代 评分
0 美丽人生 42995 剧情/喜剧/爱情 意大利 1997-12-20 116 1997 9.5
1 阿甘正传 580897 剧情/爱情 美国 1994-06-23 142 1994 9.4
2 肖申克的救赎 692795 剧情/犯罪 美国 1994-09-10 142 1994 9.6
3 控方证人 42995 剧情/悬疑/犯罪 美国 1957-12-17 116 1957 9.5
4 霸王别姬 478523 剧情/爱情/同性 中国大陆 1993-01-01 171 1993 9.4
0 A
1 A
2 A
3 A
4 A
Name: 评分, dtype: category
Categories (5, object): [E < D < C < B < A]
名字 投票人数 类型 产地 上映时间 时长 年代 评分 等级
0 美丽人生 42995 剧情/喜剧/爱情 意大利 1997-12-20 116 1997 9.5 A
1 阿甘正传 580897 剧情/爱情 美国 1994-06-23 142 1994 9.4 A
2 肖申克的救赎 692795 剧情/犯罪 美国 1994-09-10 142 1994 9.6 A
3 控方证人 42995 剧情/悬疑/犯罪 美国 1957-12-17 116 1957 9.5 A
4 霸王别姬 478523 剧情/爱情/同性 中国大陆 1993-01-01 171 1993 9.4 A
数据合并
append(上下拼接)
import numpy as np
import pandas as pd
# 读入数据
df=pd.read_csv('data1.txt')
print('原始数据')
print(df) # (1)append(上下拼接)
# 先把数据集拆分为多个,再进行合并
df_1=df[df.产地 =="美国"]
df_2=df[df.产地 == "中国大陆"] df_3=df_1.append(df_2)#append()
print(df_3)
原始数据
名字 投票人数 类型 产地 上映时间 时长 年代 评分
0 美丽人生 42995 剧情/喜剧/爱情 意大利 1997-12-20 116 1997 9.5
1 阿甘正传 580897 剧情/爱情 美国 1994-06-23 142 1994 9.4
2 肖申克的救赎 692795 剧情/犯罪 美国 1994-09-10 142 1994 9.6
3 控方证人 42995 剧情/悬疑/犯罪 美国 1957-12-17 116 1957 9.5
4 霸王别姬 478523 剧情/爱情/同性 中国大陆 1993-01-01 171 1993 9.4 #合并后的数据
名字 投票人数 类型 产地 上映时间 时长 年代 评分
1 阿甘正传 580897 剧情/爱情 美国 1994-06-23 142 1994 9.4
2 肖申克的救赎 692795 剧情/犯罪 美国 1994-09-10 142 1994 9.6
3 控方证人 42995 剧情/悬疑/犯罪 美国 1957-12-17 116 1957 9.5
4 霸王别姬 478523 剧情/爱情/同性 中国大陆 1993-01-01 171 1993 9.4
merge (左右合并)
# merge: 合并数据集, 通过left, right确定连接字段,默认是两个数据集相同的字段
# 参数 说明
# left 参与合并的左侧DataFrame
# right 参与合并的右侧DataFrame
# how 连接方式:‘inner’(默认);还有,‘outer’、‘left’、‘right’
# on 用于连接的列名,必须同时存在于左右两个DataFrame对象中,如果位指定,则以left和right列名的交集作为连接键
# left_on 左侧DataFarme中用作连接键的列
# right_on 右侧DataFarme中用作连接键的列
# left_index 将左侧的行索引用作其连接键
# right_index 将右侧的行索引用作其连接键
# sort 根据连接键对合并后的数据进行排序,默认为True。有时在处理大数据集时,禁用该选项可获得更好的性能
# suffixes 字符串值元组,用于追加到重叠列名的末尾,默认为(‘_x’,‘_y’).例如,左右两个DataFrame对象都有‘data’,则结果中就会出现‘data_x’,‘data_y’
# copy 设置为False,可以在某些特殊情况下避免将数据复制到结果数据结构中。默认总是赋值
# ”’
#有朋友总结了使用,所以直接引用了
# https://www.cnblogs.com/lijinze-tsinghua/p/9878649.html
concat():
批量数据合并(两个数据及以上)
上下合并
import numpy as np
import pandas as pd
# 读入数据
df=pd.read_csv('data1.txt')
print('原始数据')
print(df) # (1)append(上下拼接)
# 先把数据集拆分为多个,再进行合并
df_1=df[df.产地 =="美国"]
df_2=df[df.产地 == "中国大陆"] print(pd.concat([df_1,df_2]))
原始数据
名字 投票人数 类型 产地 上映时间 时长 年代 评分
0 美丽人生 42995 剧情/喜剧/爱情 意大利 1997-12-20 116 1997 9.5
1 阿甘正传 580897 剧情/爱情 美国 1994-06-23 142 1994 9.4
2 肖申克的救赎 692795 剧情/犯罪 美国 1994-09-10 142 1994 9.6
3 控方证人 42995 剧情/悬疑/犯罪 美国 1957-12-17 116 1957 9.5
4 霸王别姬 478523 剧情/爱情/同性 中国大陆 1993-01-01 171 1993 9.4
名字 投票人数 类型 产地 上映时间 时长 年代 评分
1 阿甘正传 580897 剧情/爱情 美国 1994-06-23 142 1994 9.4
2 肖申克的救赎 692795 剧情/犯罪 美国 1994-09-10 142 1994 9.6
3 控方证人 42995 剧情/悬疑/犯罪 美国 1957-12-17 116 1957 9.5
4 霸王别姬 478523 剧情/爱情/同性 中国大陆 1993-01-01 171 1993 9.4
pandas学习(数据分组与分组运算、离散化处理、数据合并)的更多相关文章
- pandas 学习 第14篇:索引和选择数据
数据框和序列结构中都有轴标签,轴标签的信息存储在Index对象中,轴标签的最重要的作用是: 唯一标识数据,用于定位数据 用于数据对齐 获取和设置数据集的子集. 本文重点关注如何对序列(Series)和 ...
- python中pandas数据分析基础3(数据索引、数据分组与分组运算、数据离散化、数据合并)
//2019.07.19/20 python中pandas数据分析基础(数据重塑与轴向转化.数据分组与分组运算.离散化处理.多数据文件合并操作) 3.1 数据重塑与轴向转换1.层次化索引使得一个轴上拥 ...
- Python 数据分析(二 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识
Python 数据分析(二) 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识 第1节 groupby 技术 第2节 数据聚合 第3节 分组级运算和转换 第4 ...
- 利用Python进行数据分析-Pandas(第六部分-数据聚合与分组运算)
对数据集进行分组并对各组应用一个函数(无论是聚合还是转换),通常是数据分析工作中的重要环节.在将数据集加载.融合.准备好之后,通常是计算分组统计或生成透视表.pandas提供了一个灵活高效的group ...
- 利用python进行数据分析之数据聚合和分组运算
对数据集进行分组并对各分组应用函数是数据分析中的重要环节. group by技术 pandas对象中的数据会根据你所提供的一个或多个键被拆分为多组,拆分操作是在对象的特定轴上执行的,然后将一个函数应用 ...
- 《python for data analysis》第九章,数据聚合与分组运算
# -*- coding:utf-8 -*-# <python for data analysis>第九章# 数据聚合与分组运算import pandas as pdimport nump ...
- Python数据聚合和分组运算(1)-GroupBy Mechanics
前言 Python的pandas包提供的数据聚合与分组运算功能很强大,也很灵活.<Python for Data Analysis>这本书第9章详细的介绍了这方面的用法,但是有些细节不常用 ...
- python数据分析之:数据聚合与分组运算
在数据库中,我们可以对数据进行分类,聚合运算.例如groupby操作.在pandas中同样也有类似的功能.通过这些聚合,分组操作,我们可以很容易的对数据进行转换,清洗,运算.比如如下图,首先通过不同的 ...
- Python之数据聚合与分组运算
Python之数据聚合与分组运算 1. 关系型数据库方便对数据进行连接.过滤.转换和聚合. 2. Hadley Wickham创建了用于表示分组运算术语"split-apply-combin ...
随机推荐
- MySQL5.7主从复制配置
1 my.cnf文件 配置 binlog_format = ROW log_bin_trust_function_creators=1 log-error = /usr/local/mysql/dat ...
- sonarqube6.7安装
1.下载sonarhttps://www.sonarqube.org/#downloads 2.配置JDK1.8 3.centOS默认mysql版本为mariaDB直接安装yum install my ...
- AQS框架
java并发包基石 AQS是JUC中很多同步组件的构建基础,简单来讲,它内部实现主要是状态变量state和一个FIFO队列来完成,同步队列的头结点是当前获取到同步状态的结点,获取同步状态state失败 ...
- OKVIS 代码框架
1. okvis_app_synchronous.cpp 在此文件中 okvis 对象为 okvis_estimator,是类 okvis::ThreadedKFVio 的实例化对象. 数据输入接口是 ...
- transform 图标旋转,IE8、IE7不兼容
要将图标旋转,只需使用transform的rotate以及transition即可完成旋转的动画效果.ease 规定慢速开始,然后变快,然后慢速结束的过渡效果; ease-in 规定以慢速开始的过 ...
- Struts自定义拦截器&拦截器工作原理
0.拦截器的调用原理: 拦截器是一个继承了序列化接口的普通接口.其工作原理是讲需要被拦截的对象作为参数传到intercept()方法内,在方法内部对此对象进行处理之后再执行原方法.intercept( ...
- C++学习3--编程基础(vector、string、三种传参)
知识点学习 Vector容器 vector是C++标准程序库中的一个类,其定义于头文件中,与其他STL组件一样,ventor属于STD名称空间: ventor是C++标准程序库里最基本的容器,设计之初 ...
- caffe-win10-cifar10
因为是在win10下安装的GPU版caffe,所以不能直接运行linux里的shell脚本.但是win10自带bash,可以运行.sh文件,网上也有直接下Cygwin和git的.我是下载好git后才知 ...
- div里 datapicker显示异常的情况之一
现象:datepicker控价显示一半 因为Div高度太小所以设置一个最小高度min-height这样就可以让时间控价显示完整了.
- shiro设置session超时时间
系统默认超时时间是180000毫秒(30分钟) long timeout = SecurityUtils.getSubject().getSession().getTimeout(); System. ...