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

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

目录

1
数据分组与分组运算<br><br>离散化处理

 数据合并

 

 

 

数据分组与分组运算

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

  

 

程序示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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())

  

 

运行结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
原始数据
       名字    投票人数        类型    产地        上映时间   时长    年代   评分
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<br>
根据产地进行分组
               投票人数          时长           年代   评分
产地                                              
中国大陆  478523.000000  171.000000  1993.000000  9.4
意大利    42995.000000  116.000000  1997.000000  9.5
美国    438895.666667  133.333333  1981.666667  9.5<br>
         投票人数   时长    年代    评分
产地                           
中国大陆   478523  171  1993   9.4
意大利     42995  116  1997   9.5
美国    1316687  400  5945  28.5<br><br>
根据年代进行分组,然后统计每一个年代的平均评分
年代
1957    9.5
1993    9.4
1994    9.5
1997    9.5
Name: 评分, dtype: float64<br><br>
多个分组变量进行分组
             投票人数   时长   评分
产地   年代                   
中国大陆 1993  478523  171  9.4
意大利  1997   42995  116  9.5
美国   1957   42995  116  9.5
     1994  636846  142  9.5<br><br>
多个分组变量进行分组之操作某列
产地    年代 
中国大陆  1993    9.4
意大利   1997    9.5
美国    1957    9.5
      1994    9.5
Name: 评分, dtype: float64

  

  

 

离散化处理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#在实际的数据分析项目中,对有数据属性,我们往往并不是关注数据的绝对数值,只关注它所处的区间或者等级
# 比如,我们可以把评分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:是否包含左端点; 

 

程序示例

1
2
3
4
5
6
7
8
9
10
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)

  

 

运行结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
原始数据
       名字    投票人数        类型    产地        上映时间   时长    年代   评分
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]<br>
       名字    投票人数        类型    产地        上映时间   时长    年代   评分 等级
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(上下拼接)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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)

  

 

1
2
3
4
5
6
7
8
9
10
11
12
原始数据
       名字    投票人数        类型    产地        上映时间   时长    年代   评分
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<br><br>#合并后的数据
       名字    投票人数        类型    产地        上映时间   时长    年代   评分
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 (左右合并)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 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,可以在某些特殊情况下避免将数据复制到结果数据结构中。默认总是赋值
# ”’
#有朋友总结了使用,所以直接引用了
# <a href="https://www.cnblogs.com/lijinze-tsinghua/p/9878649.html" target="_blank">https://www.cnblogs.com/lijinze-tsinghua/p/9878649.html</a>

 

 

 

 

concat():

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

上下合并

1
2
3
4
5
6
7
8
9
10
11
12
13
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]))

  

 

1
2
3
4
5
6
7
8
9
10
11
12
原始数据
       名字    投票人数        类型    产地        上映时间   时长    年代   评分
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 @   -零  阅读(1468)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示