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

  

 

posted @ 2019-01-19 15:45  -零  阅读(1443)  评论(0编辑  收藏  举报