pandas 实战:分析三国志人物

2023-11-02 03:59

本文主要是介绍pandas 实战:分析三国志人物,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

简介

背景

Pandas 是 Python 的一个工具库,用于数据分析。由 AQR Capital Management 于 2008 年 4 月开发,2009 年开源,最初被作为金融数据分析工具而开发出来。Pandas 名称来源于 panel data(面板数据)和 Python data analysis(Python 数据分析)。适用于金融、统计等数据分析领域。

特点:两大数据结构

Series 和 DataFrame
(1)Series:一维数据(列+索引)

pandas.Series(['东汉', '马腾', '?', 212], index=['国家', '姓名', '出生年份', '逝世年份'])

series

(2)DataFrame:二维数据(表格:多个列+行/列索引)
Series 和 DataFrame

pandas.DataFrame([['东汉', 300],['魏国', 800],['蜀国', 400],['吴国', 600],['西晋', 1000]
], columns=['国家', '国力'])

dataframe

安装

如果你使用的是数据科学的 Python 发行版:Anaconda,可以使用 conda 安装

conda install pandas

如果是普通的 Python 环境,可以使用 pip 安装

pip install pandas

实战

我们先看看数据长啥样,数据存在 sanguo.csv 文档中

$ head sanguo.csv

head

(1)导入模块

import pandas as pd

(2)读取 csv 数据

# 当前目录下的 sanguo.csv 文件,na_values 指定哪些值为空
df = pd.read_csv('./sanguo.csv', na_values=['na', '-', 'N/A', '?'])

1)查看数据

# 查看前 5 条
df.head(5)
# NaN 为空值

df.head()

# 查看后 5 条
df.tail(5)

df.tail()

2)查看数据概况

df.dtypes
# 查看数据类型

dtypes

df.info()
# 有 25 行,5 列
# 各列的名称(kindom、name、birth、die、character)、非空数目、数据类型

df.info()

df.describe()
# 查看数值型列统计值:总数、平均值、标准差、最小值、25%/50%/75% 分位数、最大值

df.describe

3)数据操作
设置列名

df.columns = ['国家', '姓名', '出生年份', '逝世年份', '角色']
df.head()

设置列名

添加新列

# 计算年龄
df['年龄'] = df['逝世年份'] - df['出生年份']
df.head(10)

添加新列
计算列平均值、中位数、众数、最/小值

功能函数
平均值df['年龄'].mean()50.57142857142857
中位数df['年龄'].median()53.0
众数df['年龄'].mode()72.0
最大值df['年龄'].max()72.0
最小值df['年龄'].min()12.0

列筛选

# 筛选年轮小于 50 的数据
df[df['年龄'] < 50]

筛选数据

# 筛选曹姓的数据
df[df['姓名'].str.startswith('曹')]

筛选数据

分组

df.groupby('国家')['姓名'].count()
# 类似于 SQL: SELECT 国家, COUNT(姓名) FROM x GROUP BY 国家

分组
apply 函数

df['状态'] = df['年龄'].apply(lambda x: '长寿' if isinstance(x, (int, float)) and x > 50 else '一般')
df.head()

apply
取数据:loc、iloc

df.loc[4]取第 5 行数据(索引从 0 开始)loc
df.loc[4:5]取第 5~6 行数据loc
df.loc[4, '姓名']
df.iloc[4, 1]
取第 5 行姓名列
或第 5 行第 2 列
loc
df.loc[4, ['姓名', '年龄']]
df.iloc[4, [1, 5]]
取第 5 行姓名、年龄列
或第 5 行第 2 列、第 6 列
loc
df.loc[4:5, ['姓名', '年龄']]
df.iloc[[4, 5], [1, 5]]
df.iloc[4:6, [1, 5]]
取第 5~6 行姓名、年龄列
或取第 5~6 行第 2 列、第 6 列
loc
df.iloc[4:9, 1:4]取 5~10 列第 2~5 列iloc

追加、合并数据
concat

# 创建列
newpeople = pd.Series(['东汉', '马腾', '?', 212, '?'], index=['国家', '姓名', '出生年份', '逝世年份', '年龄'])# 将 Series 转为 DataFrame,并对 DataFrame 转置(列转行)
newpeople = newpeople.to_frame().T# 追加行(axis=0),重置索引(ignore_index=True)
df2 = pd.concat([df, newpeople], axis=0, ignore_index=True)
df2.tail()

追加数据
merge

# 创建表格
kindom_power = pd.DataFrame([['东汉', 300],['魏国', 800],['蜀国', 400],['吴国', 600],['西晋', 1000]
], columns=['国家', '国力'])# 按国家列进行两个表格(左 df,右 kindom_power)合并
df3 = pd.merge(left=df, right=kindom_power, on='国家')
df3.head(10)

merge
4)导出数据

# 写入 sanguo_result.csv 中,不输出索引值
df.to_csv('sanguo_result.csv', index=False)

csv

参考

  • https://pandas.pydata.org/
  • https://www.runoob.com/pandas/pandas-tutorial.html
  • https://github.com/xchenhao/code-notes/blob/master/data/sanguo.csv sanguo.csv 数据

这篇关于pandas 实战:分析三国志人物的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/xchenhao/article/details/128667563
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/327961

相关文章

SpringBoot中六种批量更新Mysql的方式效率对比分析

《SpringBoot中六种批量更新Mysql的方式效率对比分析》文章比较了MySQL大数据量批量更新的多种方法,指出REPLACEINTO和ONDUPLICATEKEY效率最高但存在数据风险,MyB... 目录效率比较测试结构数据库初始化测试数据批量修改方案第一种 for第二种 case when第三种

解决1093 - You can‘t specify target table报错问题及原因分析

《解决1093-Youcan‘tspecifytargettable报错问题及原因分析》MySQL1093错误因UPDATE/DELETE语句的FROM子句直接引用目标表或嵌套子查询导致,... 目录报js错原因分析具体原因解决办法方法一:使用临时表方法二:使用JOIN方法三:使用EXISTS示例总结报错原

Java docx4j高效处理Word文档的实战指南

《Javadocx4j高效处理Word文档的实战指南》对于需要在Java应用程序中生成、修改或处理Word文档的开发者来说,docx4j是一个强大而专业的选择,下面我们就来看看docx4j的具体使用... 目录引言一、环境准备与基础配置1.1 Maven依赖配置1.2 初始化测试类二、增强版文档操作示例2.

MySQL 多列 IN 查询之语法、性能与实战技巧(最新整理)

《MySQL多列IN查询之语法、性能与实战技巧(最新整理)》本文详解MySQL多列IN查询,对比传统OR写法,强调其简洁高效,适合批量匹配复合键,通过联合索引、分批次优化提升性能,兼容多种数据库... 目录一、基础语法:多列 IN 的两种写法1. 直接值列表2. 子查询二、对比传统 OR 的写法三、性能分析

MySQL中的LENGTH()函数用法详解与实例分析

《MySQL中的LENGTH()函数用法详解与实例分析》MySQLLENGTH()函数用于计算字符串的字节长度,区别于CHAR_LENGTH()的字符长度,适用于多字节字符集(如UTF-8)的数据验证... 目录1. LENGTH()函数的基本语法2. LENGTH()函数的返回值2.1 示例1:计算字符串

Python办公自动化实战之打造智能邮件发送工具

《Python办公自动化实战之打造智能邮件发送工具》在数字化办公场景中,邮件自动化是提升工作效率的关键技能,本文将演示如何使用Python的smtplib和email库构建一个支持图文混排,多附件,多... 目录前言一、基础配置:搭建邮件发送框架1.1 邮箱服务准备1.2 核心库导入1.3 基础发送函数二、

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

PowerShell中15个提升运维效率关键命令实战指南

《PowerShell中15个提升运维效率关键命令实战指南》作为网络安全专业人员的必备技能,PowerShell在系统管理、日志分析、威胁检测和自动化响应方面展现出强大能力,下面我们就来看看15个提升... 目录一、PowerShell在网络安全中的战略价值二、网络安全关键场景命令实战1. 系统安全基线核查

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语