博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
pandas学习(数据分组与分组运算、离散化处理、数据合并)
阅读量:6798 次
发布时间:2019-06-26

本文共 5860 字,大约阅读时间需要 19 分钟。

pandas学习(数据分组与分组运算、离散化处理、数据合并)

目录

数据分组与分组运算 离散化处理

 数据合并

 

 

 

数据分组与分组运算

GroupBy技术:实现数据的分组,和分组运算,作用类似于数据透视表数据分组--〉归纳

  

 

程序示例

import numpy as npimport 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.51    阿甘正传  580897     剧情/爱情    美国  1994-06-23  142  1994  9.42  肖申克的救赎  692795     剧情/犯罪    美国  1994-09-10  142  1994  9.63    控方证人   42995  剧情/悬疑/犯罪    美国  1957-12-17  116  1957  9.54    霸王别姬  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.51993    9.41994    9.51997    9.5Name: 评分, 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.5Name: 评分, 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 npimport 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['等级']=dataprint(df)

  

 

运行结果

原始数据       名字    投票人数        类型    产地        上映时间   时长    年代   评分0    美丽人生   42995  剧情/喜剧/爱情   意大利  1997-12-20  116  1997  9.51    阿甘正传  580897     剧情/爱情    美国  1994-06-23  142  1994  9.42  肖申克的救赎  692795     剧情/犯罪    美国  1994-09-10  142  1994  9.63    控方证人   42995  剧情/悬疑/犯罪    美国  1957-12-17  116  1957  9.54    霸王别姬  478523  剧情/爱情/同性  中国大陆  1993-01-01  171  1993  9.40    A1    A2    A3    A4    AName: 评分, dtype: categoryCategories (5, object): [E < D < C < B < A]        名字    投票人数        类型    产地        上映时间   时长    年代   评分 等级0    美丽人生   42995  剧情/喜剧/爱情   意大利  1997-12-20  116  1997  9.5  A1    阿甘正传  580897     剧情/爱情    美国  1994-06-23  142  1994  9.4  A2  肖申克的救赎  692795     剧情/犯罪    美国  1994-09-10  142  1994  9.6  A3    控方证人   42995  剧情/悬疑/犯罪    美国  1957-12-17  116  1957  9.5  A4    霸王别姬  478523  剧情/爱情/同性  中国大陆  1993-01-01  171  1993  9.4  A

 

 

 

 

数据合并

append(上下拼接)

import numpy as npimport 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.51    阿甘正传  580897     剧情/爱情    美国  1994-06-23  142  1994  9.42  肖申克的救赎  692795     剧情/犯罪    美国  1994-09-10  142  1994  9.63    控方证人   42995  剧情/悬疑/犯罪    美国  1957-12-17  116  1957  9.54    霸王别姬  478523  剧情/爱情/同性  中国大陆  1993-01-01  171  1993  9.4 #合并后的数据       名字    投票人数        类型    产地        上映时间   时长    年代   评分1    阿甘正传  580897     剧情/爱情    美国  1994-06-23  142  1994  9.42  肖申克的救赎  692795     剧情/犯罪    美国  1994-09-10  142  1994  9.63    控方证人   42995  剧情/悬疑/犯罪    美国  1957-12-17  116  1957  9.54    霸王别姬  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,可以在某些特殊情况下避免将数据复制到结果数据结构中。默认总是赋值# ”’#有朋友总结了使用,所以直接引用了#

 

 

 

 

concat():

批量数据合并(两个数据及以上)

上下合并

import numpy as npimport 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.51    阿甘正传  580897     剧情/爱情    美国  1994-06-23  142  1994  9.42  肖申克的救赎  692795     剧情/犯罪    美国  1994-09-10  142  1994  9.63    控方证人   42995  剧情/悬疑/犯罪    美国  1957-12-17  116  1957  9.54    霸王别姬  478523  剧情/爱情/同性  中国大陆  1993-01-01  171  1993  9.4       名字    投票人数        类型    产地        上映时间   时长    年代   评分1    阿甘正传  580897     剧情/爱情    美国  1994-06-23  142  1994  9.42  肖申克的救赎  692795     剧情/犯罪    美国  1994-09-10  142  1994  9.63    控方证人   42995  剧情/悬疑/犯罪    美国  1957-12-17  116  1957  9.54    霸王别姬  478523  剧情/爱情/同性  中国大陆  1993-01-01  171  1993  9.4

  

 

转载于:https://www.cnblogs.com/-wenli/p/10291946.html

你可能感兴趣的文章
DataSet,DataTable,DateView的关系和用法
查看>>
让IE浏览器支持HTML5标准的方法(转)
查看>>
JBPM流程部署之流程版本升级
查看>>
理解内存分配
查看>>
HDU_3339 In Action(Dijkstra + DP)
查看>>
WCF4.0进阶系列--第二章 寄宿WCF服务(转)
查看>>
用驴子拖宝马——怎样滥用结构体
查看>>
如何删除有主外键关系的数据呢?
查看>>
调试九法:软硬件错误的排查之道<书评>
查看>>
无废话ExtJs 入门教程四[表单:FormPanel]
查看>>
ubuntu做路由器
查看>>
WCF NetTcpBinding Transport安全模式(2) 默认安全配置
查看>>
【分布计算环境学习笔记】2 分布式系统中的面向对象技术
查看>>
MFC使用ADO对象开发数据库应用程序
查看>>
zookeeper原理
查看>>
改变自己(2)
查看>>
Redis Error
查看>>
paip.c++ qt 目录遍历以及文件操作
查看>>
银行对账
查看>>
剑指 offer set 16 数字在排序数组中出现的次数
查看>>