数据处理和统计分析 —— Pandas 基础(附数据集)

目录

一、概述

(一)series

1、组成

2、创建方式

3、Series常用属性

(二)DataFrame

1、组成:

2、构建方式

(三)数据导入和导出

二、加载数据集

加载部分数据

loc / iloc

三、分组和聚合计算

需求1:查询每个大洲的平均年龄寿命

需求2:查询各大洲的平均年龄和平均GDP

需求3:查询各个大洲和国家各自的,平均年龄寿命和平均GDP

需求4:查询各个大洲的,平均和最大GDP、年龄

需求5:查询各个大洲的,平均GDP和最大年龄

需求6:每个大洲列出了多少个国家和地区(去重)

需求7:去重后,打印所有国家个数/打印所有国家名称(去重后)

四、matplotlib绘图

数据集网盘下载:
链接:https://pan.quark.cn/s/0e577858dba3?pwd=FJnb
提取码:FJnb

一、概述

  • DataFrameSeries是Pandas最基本的两种数据结构
  • Series和Python中的列表非常相似,但是它的每个元素的数据类型必须相同
  • 在Pandas中,Series是一维容器,Series表示DataFrame的每一行或每一列
  • 可以把DataFrame理解成一张表
  • 可以把DataFrame看作由Series对象组成的字典,其中key是列名,值是Series

(一)series

1、组成

  • 索引(一组与之关联的标签,如果不显式的提供索引,pandas会自动创建一个从0开始的整数索引)
  • 数据(一组值(可以是任意numPy支持的数据类型:int、float、string等);

2、创建方式

        注意:index参数可以覆盖自动创建的索引序列(自定义)

  • 通过字典的方式创建
    import pandas as pd 
    s = pd.Series({'a':1,'b':2,'c':3,'d':4,'e':5})
    print(s)
    print(type(s))
  • 通过ndarray方式创建
    import pandas as pd 
    s = pd. Series([1,2,3,4,5])
    print(s)
    print(type(s))
  • 通过python的list方式创建
    import pandas as pd 
    import numpy as np
    arr = np.array([1,2,3,4,5])
    print(arr)
    print(type(arr))
    s = pd.Series(arr)
    print(s)
    print(type(s))
  • 通过元祖对象的方式创建
    import pandas as pd 
    s = pd.Series((1,2,3,4,5))
    print(s)
    print(type(s))

3、Series常用属性

# 1.导入pandas模块
import pandas as pd
import osprint(os.getcwd())
print("-------------------------------------------")# 2.创建series,创建一个csv文件
# 使用read_csv函数,返回的是DataFrame对象,而不是Series对象
df = pd.read_csv('data/nobel_prizes.csv', index_col='id')
# print(df.head()) # 获取前5行数据# 3.创建series
# 获取第一行数据
first = df.iloc[0]
print(first) # 获取第一行数据
print("-------------------------------------------")
print(type(first))
print("-------------------------------------------")
print(first.dtype) # 获取数据类型
print("-------------------------------------------")
print(first['year'],first['year'].dtype)
print("-------------------------------------------")
print(first.shape)
print("-------------------------------------------")
print(first.size)
print("-------------------------------------------")
print(first.index)
print("-------------------------------------------")
print(first.values)
  • 常用方法

# 1:导入pandas模块
import pandas as pd# 2: 创建series对象
s1 = pd.Series([1, 2, 3, 4, 2, 3], index=['a', 'b', 'c', 'd', 'e', 'f'])
# """
# 核心区别:
# 形式          类型                  行为              返回值
# s1.max       方法对象(没有被调用)    返回方法本身       <bound method Series.max of
# s1.max()     方法调用               执行计算操作       实际的最大值
# """
# print(s1.max)
# print(s1.max())
# print(s1.size)
# print(s1.min())
print(s1)print(s1.max)
print("--------------")
print(s1.max())
print("--------------")
print(s1.to_list()) # [1, 2, 3, 4, 2, 3]
print("--------------")
print(s1.to_list) # [1, 2, 3, 4, 2, 3]# 3:演示series的常用方法
print(len(s1)) # 6
print(s1.size) # 6
print(s1.head()) # 默认打印前五条
print(s1.head(3)) # 打印前3条
print(s1.tail())  # 默认打印后5条
print(s1.tail(3)) # 打印后3条
print(s1.index) # Index(['a', 'b', 'c', 'd', 'e', 'f'], dtype='object')
print(s1.keys())  # Index(['a', 'b', 'c', 'd', 'e', 'f'], dtype='object')
print(s1.values) # [1 2 3 4 2 3]
print(s1.to_list()) # [1, 2, 3, 4, 2, 3]
print(type(s1.to_list())) # <class 'list'>print("---------------------------")
print(s1.describe()) # 统计信息
print(s1.max())     # 获取series的元素最大值
print(s1.min())       # 获取series的元素最小值
print(s1.mean())      # 获取series的元素平均值
print(s1.median())    # 获取series的元素中位数
print(s1.mode())      # 获取series的元素众数
print(s1.std())       # 获取series的元素标准差print("---------------------------")
print(s1.drop_duplicates())# 删除重复的元素
print(s1.sort_values())# 排序,根据值排序,默认是升序
print(s1.sort_values())# 排序,根据值排序,默认是升序
print(s1.sort_values(ascending=False))# 排序,根据值排序,降序
print(s1.sort_index())  # 排序,根据索引排序,默认是升序
print(s1.sort_index(ascending=False)) # 排序,根据索引排序,降序
print(s1.unique()) # 去重
print(s1.value_counts()) # 统计每个元素出现的次数

(二)DataFrame

  • 可以看成是一个二维表格(行列),类似于Excel表格
  • 每一列就是一个series,所有列共享一个索引

1、组成:

  • 列: 每一列就是一个series,所有的列共享同一个索引
  • 行: 由索引标记的每一行数据(行索引)
  • 索引: 行的标签,称之为行索引,如果不指定,pandas会自动创建(0,1,2....)
  • 列索引(column): 列的标签,也称为列名。

2、构建方式

使用字典来创建DataFrame

import pandas as pd
s = {'name':['张三','李四','王五'],'age':[18,19,31],'sex':['男','女','男']}
df = pd.DataFrame(s)
print(df)
print(type(df))

创建DataFrame的时指定列的顺序和行索引

# 创建DataFrame的时指定列的顺序和行索引
import pandas as pd
df = pd.DataFrame({'name':['张三','李四','王五'],'age':[18,19,31],'sex':['男','女','男']},index=['a','b','c'],columns=['name','age','sex','id'])
print(df)
print(type(df))

(三)数据导入和导出

1、保存pickle文件
        可以使用pd.read_pickle函数读取.pickle文件中的数据

import pandas as pd
# 读取movie.csv文件
movie_fd = pd.read_csv('data/movie.csv')
# 将读取的数据保存为pickle文件
movie_fd.to_pickle('data/movie.pickle')
movie_fd.head()

2、保存csv文件
        在CSV文件中,对于每一行,各列采用逗号分隔
        CSV是数据协作和共享的首选格式

import pandas as pd
movie_fd.to_csv('data/movie2.csv')
movie_fd2 = pd.read_csv('data/movie2.csv')
movie_fd2.head()

二、加载数据集

目的:
        1、做数据分析首先要加载数据,并查看其结构和内容,对数据有初步的了解
        2、查看行,列数据分布情况
        3、查看每一列中存储信息的类型

import pandas as pddata = pd.read_csv('data/movie.csv')  # 读取数据
print(data.head())  # 查看前5行数据# 也可以通过指定分隔符加载tsv文件
data = pd.read_csv('data/gapminder.tsv', sep='\t')
data.head()

加载部分数据

加载一列数据,通过df['列名']方式获取

print(df['movie_title'])

加载多列数据,通过df[['列名1','列名2',...]]

print(df[['movie_title', 'imdb_score']])

获取第4行数据

获取第1行和第62行和83行数据

print(df.loc[[3]]) 
print(df.loc[[0, 61, 82]]) 

loc / iloc

需要注意的是,iloc传入的是索引的序号,loc是索引的标签
        如果loc 和 iloc 传入的参数弄混了,会报错
loc 只能接受行/列 的名字,iloc只能接受行/列的序号

# 获取第1行和第62行和83行数据
print(df.iloc[[0, 61, 82]])
# 获取前3行数据
print(df.iloc[:3])
# 使用iloc时可以传入-1来获取最后一行数据,使用loc的时候不行
print(df.iloc[[-1]])

import pandas as pddf = pd.read_csv('data/scientists.csv')print(df.loc[0, ['Name', 'Age', 'Born']])  # 获取第1行数据的三列数据
print("-----------------------------------------------------------------------")
print(df.loc[[0, 1], ['Name', 'Age', 'Born']])  # 获取第1行和第2行数据,三列数据
print("-----------------------------------------------------------------------")
tmp_range = list(range(3, 5))
print(tmp_range)  # 获取连续多列数据
print(df.iloc[:, tmp_range])
print("-----------------------------------------------------------------------")
print(df.iloc[0, 1])  # 获取第1行第2列数据
print("-----------------------------------------------------------------------")
print(df.iloc[[0, 1, 5], [1, 2]])  # 获取第1行和第2行第6行、第2列和第3列数据
print("-----------------------------------------------------------------------")
print(df.iloc[0:3, 0:3])  # 获取第1行到第3行、第1列到第3列数据
print("-----------------------------------------------------------------------")
print(df.iloc[:, 1:5:2])  # 获取第2列到第5列、步长为2的数据
print("-----------------------------------------------------------------------")
# 获取第1列、第3列、第4列的数据
print(df.iloc[:, [True, False, True, True, False]])

知识点总结

三、分组和聚合计算

需求1:查询每个大洲的平均年龄寿命

# 分组操作
print(df.groupby('continent'))
# 写法一
print(df.groupby('continent')['lifeExp'].mean())
print("--------------------------------------------------")
# 写法二
print(df.groupby('continent').lifeExp.mean())

需求2:查询各大洲的平均年龄和平均GDP

print(df.groupby('continent')[['lifeExp','gdpPercap']].mean())

需求3:查询各个大洲和国家各自的,平均年龄寿命和平均GDP

print(df.groupby(['continent','country'])[['lifeExp','gdpPercap']].mean())

需求4:查询各个大洲的,平均和最大GDP、年龄

# 写法1:
print(df.groupby('continent')[['lifeExp','gdpPercap']].aggregate(['mean','max']))

需求5:查询各个大洲的,平均GDP和最大年龄

# 写法2:
print(df.groupby('continent').aggregate({'lifeExp':'mean','gdpPercap':'max'}))

需求6:每个大洲列出了多少个国家和地区(去重)

print(df.groupby('continent')['country'].nunique())
print("--------------------------------------------------")
# 每个大洲列出了多少个国家(不去重)
print(df.groupby('continent')['country'].size())

需求7:去重后,打印所有国家个数/打印所有国家名称(去重后)

print(df['country'].nunique())  
print(df['country'].unique())   
运行结果:
142
['Afghanistan' 'Albania' 'Algeria' 'Angola' 'Argentina' 'Australia''Austria' 'Bahrain' 'Bangladesh' 'Belgium' 'Benin' 'Bolivia''Bosnia and Herzegovina' 'Botswana' 'Brazil' 'Bulgaria' 'Burkina Faso''Burundi' 'Cambodia' 'Cameroon' 'Canada' 'Central African Republic''Chad' 'Chile' 'China' 'Colombia' 'Comoros' 'Congo, Dem. Rep.''Congo, Rep.' 'Costa Rica' "Cote d'Ivoire" 'Croatia' 'Cuba''Czech Republic' 'Denmark' 'Djibouti' 'Dominican Republic' 'Ecuador''Egypt' 'El Salvador' 'Equatorial Guinea' 'Eritrea' 'Ethiopia' 'Finland''France' 'Gabon' 'Gambia' 'Germany' 'Ghana' 'Greece' 'Guatemala' 'Guinea''Guinea-Bissau' 'Haiti' 'Honduras' 'Hong Kong(China)' 'Hungary' 'Iceland''India' 'Indonesia' 'Iran' 'Iraq' 'Ireland' 'Israel' 'Italy' 'Jamaica''Japan' 'Jordan' 'Kenya' 'Korea, Dem. Rep.' 'Korea, Rep.' 'Kuwait''Lebanon' 'Lesotho' 'Liberia' 'Libya' 'Madagascar' 'Malawi' 'Malaysia''Mali' 'Mauritania' 'Mauritius' 'Mexico' 'Mongolia' 'Montenegro''Morocco' 'Mozambique' 'Myanmar' 'Namibia' 'Nepal' 'Netherlands''New Zealand' 'Nicaragua' 'Niger' 'Nigeria' 'Norway' 'Oman' 'Pakistan''Panama' 'Paraguay' 'Peru' 'Philippines' 'Poland' 'Portugal''Puerto Rico' 'Reunion' 'Romania' 'Rwanda' 'Sao Tome and Principe''Saudi Arabia' 'Senegal' 'Serbia' 'Sierra Leone' 'Singapore''Slovak Republic' 'Slovenia' 'Somalia' 'South Africa' 'Spain' 'Sri Lanka''Sudan' 'Swaziland' 'Sweden' 'Switzerland' 'Syria' 'Taiwan(China)''Tanzania' 'Thailand' 'Togo' 'Trinidad and Tobago' 'Tunisia' 'Turkey''Uganda' 'United Kingdom' 'United States' 'Uruguay' 'Venezuela' 'Vietnam''West Bank and Gaza' 'Yemen, Rep.' 'Zambia' 'Zimbabwe']

四、matplotlib绘图

import pandas as pd
import matplotlib.pyplot as pltdf = pd.read_csv('data/gapminder.tsv', sep='\t')
globals_yearly_life_expectancy = df.groupby('year')['lifeExp'].mean()
print(globals_yearly_life_expectancy)
globals_yearly_life_expectancy.plot()
plt.show()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/919346.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/919346.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

github 如何在 readme 显示Star History

在GitHub的README文件中显示Star History&#xff08;星标历史&#xff09;图表&#xff0c;可以通过以下几种方式实现&#xff1a; 使用Star History服务 你可以使用Star History服务来生成并嵌入星标历史图表 。具体步骤如下&#xff1a; 访问 Star History 网站: https:/…

安全防范方案

一、基于地理位置的访问控制&#xff08;核心方案&#xff09; 原理&#xff1a;通过内置GeoIP数据库或第三方IP库识别访问源国家/地区&#xff0c;动态拦截非目标区域IP。 配置步骤&#xff1a; 启用GeoIP模块 登录管理控制台 → 安全策略 → 地理位置策略 → 加载MaxMind Ge…

Python爬虫实战:研究optimesh库,构建Github网格数据采集系统

1. 引言 1.1 研究背景与意义 在计算机辅助设计(CAD)、有限元分析(FEA)、计算流体力学(CFD)等领域,网格作为离散化连续空间的基础载体,其质量直接影响数值模拟的精度与效率。高质量的网格应具备单元形状规则、分布均匀、边界贴合度高等特征,而低质量网格可能导致计算…

利用Qwen大模型进行c++11并发库的学习,与时俱进!!!!

文章目录 1、学习新的东西可以借助ai和官方文档 1.1 会问问题 异步编程教程 1. std::future 2. std::shared_future 3、std::promise 4、4. std::packaged_task 5. std::async 6. std::future_status 和等待函数 综合代码 总结 1、学习新的东西可以借助ai和官方文档 因为别人写…

曲面/线 拟合gnuplot

1. 下载gnuplot windows 版&#xff0c;安装&#xff0c;&#xff08;别的绿色的可能下载即用&#xff0c;推荐下面链接这款&#xff09; gnuplot - Browse Files at SourceForge.net 2. 准备数据&#xff0c;存成data.dat或者其它文件名称&#xff0c;放桌面 数据内容如下…

CentOS Linux 7 (Core)上部署Oracle 11g、19C RAC详细图文教程

一、部署参考链接&#xff1a; 墨天轮数据库社区 - 乐知乐享&#xff0c;同心共济 实战篇&#xff1a;一步步教你 Linux 7 安装 Oracle 11GR2 RAC 实战篇&#xff1a;Linux7 安装 Oracle 19C RAC 详细图文教程 Linux7 安装 Oracle 19C RAC 详细图文教程

WebSocket DevTools 开发调试工具完全指南 – 实时监控、消息拦截、性能分析一站式解决方案

概述 WebSocket DevTools 是一款专为 WebSocket 连接调试而设计的浏览器开发者工具扩展。它提供了实时监控、消息拦截、连接管理等功能&#xff0c;帮助开发者快速定位和解决 WebSocket 相关问题。 主要特性 &#x1f50d; 实时监控&#xff1a;实时显示 WebSocket 连接状态…

常见的光源频闪控制方式

一、光源频闪的优势消除运动模糊&#xff0c;提升成像质量 光源以极短脉冲&#xff08;微秒级&#xff09;与相机曝光严格同步&#xff0c;实现“瞬时冻结”高速运动物体。增强特征对比度&#xff0c;提高缺陷检出率 频闪模式下&#xff0c;LED可短时超负荷工作&#xff0c;峰值…

读From GPT-2 to gpt-oss: Analyzing the Architectural Advances(续)

序 本篇由来&#xff0c;在COC上我当面感谢了组委会和姜宁老师&#xff0c;随即被姜宁老师催稿&#xff0c;本来当天晚上写了一个流水账&#xff0c;感觉甚为不妥。于是决定慢慢写&#xff0c;缓缓道来。要同时兼顾Show me the code&#xff0c;Show me the vide。希望能形成一…

6-7 TIM编码器接口 [江科协STM32]

一、引入&#xff08;1&#xff09;编码器接口的好处&#xff1a;节约软件资源&#xff1a;外部中断计次&#xff0c;程序频繁进入中断&#xff0c;则软件资源会被简单频繁的工作给占用&#xff0c;效率不高使用定时器的编码器接口&#xff0c;再配合编码器&#xff0c;就可以测…

01数据结构-交换排序

01数据结构-交换排序1.冒泡排序1.1基础冒泡排序1.1.1基础冒泡排序代码实现1.2冒泡排序的一次优化1.2.1冒泡排序的第一次优化代码实现1.3冒泡排序的二次优化1.3.1 冒泡排序的二次优化代码实现2.快速排序2.1双边循环法2.1.1双边循环法的代码实现2.2单边循环法2.2.1单边循环法代码…

MySQL架构和储存引擎

MySQL服务器整体架构如下&#xff1a;连接层&#xff1a;连接层的作用是处理客户端的连接&#xff0c;如何管理连接的。网络端口和连接管理线程&#xff1a;网络端口&#xff1a;一台服务器可以连接网络上多个端口的客户连接&#xff0c;只需要开放多个端口&#xff0c;只需要在…

详解flink java基础(一)

文章目录1.流式处理flink介绍2.Flink SQL介绍3. Flink Runtime4.使用flink集成kafka5.使用Flink SQL进行有状态流处理6.Event time & Watermarks7. flink Checkpoints & recovery1.流式处理flink介绍 实时服务依赖流式处理: flink优点: 高性能丰富的特性&#xff1a…

Day119 持续集成docker+jenkins

Day119 dockerjenkins 1.Dockerfile Dockerfile 可以用于项目部署。通过编写 Dockerfile&#xff0c;可以将整个项目及其所需的依赖项打包到一个 Docker 镜像中&#xff0c;然后在任何支持 Docker 的环境中部署和运行该镜像 Dockerfile 是用于构建 Docker 镜像的文本文件。它包…

Vue3+Vite MPA多页面应用开发完整指南 – 从零搭建到部署优化

什么是 MPA 多页面应用 MPA&#xff08;Multi-Page Application&#xff09;是由多个独立的 HTML 页面组成的应用&#xff0c;每个页面都有独立的入口文件。与 SPA 不同&#xff0c;MPA 的每个页面都是独立的&#xff0c;页面间通过链接跳转&#xff0c;适合大型项目或需要 SE…

【企业级架构】企业战略到技术落地的全流程【第一篇】

目录 一、人生蓝图与企业罗盘&#xff1a;战略视角下的成长架构 1. 大学毕业迷茫期 → 企业未制定战略前&#xff1a;无方向、无目标​ 2. 制定职业规划 → 企业战略制定&#xff1a;明确 “去哪” 和 “分几步走”​ 3. 盘点自身能力差距 → 业务架构梳理&#xff1a;搞清…

(二) Python + 地球信息科学与技术 = 经典案例分析

目录 四、农业精准施肥与产量预测&#xff08;植被指数 机器学习&#xff09; 五、公共场所踩踏事故预警系统&#xff08;时空大数据 Web 开发&#xff09; 六、森林火灾智能识别与救援路径规划&#xff08;遥感 路径优化&#xff09; 七、海岸线侵蚀动态监测与防护&…

从需求到部署全套方案:餐饮服务许可证数据可视化分析系统的大数据技术实战

&#x1f393; 作者&#xff1a;计算机毕设小月哥 | 软件开发专家 &#x1f5a5;️ 简介&#xff1a;8年计算机软件程序开发经验。精通Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等技术栈。 &#x1f6e0;️ 专业服务 &#x1f6e0;️ 需求定制化开发源码提…

Qt 关于QString和std::string数据截断的问题- 遇到\0或者0x00如何处理?

Qt 关于QString和std::string数据截断的问题- 遇到\0或者0x00如何处理&#xff1f;引言一、解决方案二、使用QByteArray注意事项引言 在Qt开发中&#xff0c;使用QString或std::string获取、发送字符串时&#xff0c;遇到\0(空字符)或者0x00(十六进制表示)可能导致数据截断&am…

Spring Cloud LoadBalancer 最佳实践

Ribbon 曾经是 Spring Cloud 家族默认的客户端负载均衡工具&#xff0c;而 Spring Cloud LoadBalancer (SCLB) 是官方替换 Ribbon 的新实现。表面上它们都解决 “服务调用时选哪个实例” 的问题&#xff0c;但在理念、架构和生态上差异不小。一、Ribbon vs SCLB1. 定位和生态…