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 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?