pandas实战:分析三国志人物示例实现
作者:xchenhao 发布时间:2023-07-12 21:11:46
简介
背景
Pandas 是 Python 的一个工具库,用于数据分析。
由 AQR Capital Management 于 2008 年 4 月开发,2009 年开源,最初被作为金融数据分析工具而开发出来。
Pandas 名称来源于 panel data(面板数据)和 Python data analysis(Python 数据分析)。
适用于金融、统计等数据分析领域。
特点:
两大数据结构
Series 和 DataFrame
(1)Series:一维数据(列+索引)
pandas.Series(['东汉', '马腾', '?', 212], index=['国家', '姓名', '出生年份', '逝世年份'])
(2)DataFrame:二维数据(表格:多个列+行/列索引)
pandas.DataFrame([
['东汉', 300],
['魏国', 800],
['蜀国', 400],
['吴国', 600],
['西晋', 1000]
], columns=['国家', '国力'])
安装
如果你使用的是数据科学的 Python 发行版:Anaconda,可以使用 conda 安装
conda install pandas
如果是普通的 Python 环境,可以使用 pip 安装
pip install pandas
实战
我们先看看数据长啥样,数据存在 sanguo.csv 文档中
$ head sanguo.csv
(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 为空值
# 查看后 5 条
df.tail(5)
2)查看数据概况
df.dtypes
# 查看数据类型
df.info()
# 有 25 行,5 列
# 各列的名称(kindom、name、birth、die、character)、非空数目、数据类型
df.describe()
# 查看数值型列统计值:总数、平均值、标准差、最小值、25%/50%/75% 分位数、最大值
3)数据操作
设置列名
df.columns = ['国家', '姓名', '出生年份', '逝世年份', '角色']
df.head()
添加新列
# 计算年龄
df['年龄'] = df['逝世年份'] - df['出生年份']
df.head(10)
计算列平均值、中位数、众数、最/小值
平均值:df['年龄'].mean()
中位数:df['年龄'].median()
众数:df['年龄'].mode()
最大值:df['年龄'].max()
最小值:df['年龄'].min()
列筛选
# 筛选年轮小于 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()
取数据:loc、iloc
df.loc[4]
取第 5 行数据(索引从 0 开始)
df.loc[4:5]
取第 5~6 行数据
df.loc[4, '姓名']或 df.iloc[4, 1]取第 5 行姓名列或第 5 行第 2 列
df.loc[4, ['姓名', '年龄']]或 df.iloc[4, [1, 5]]取第 5 行姓名、年龄列或第 5 行第 2 列、第 6 列
df.loc[4:5, ['姓名', '年龄']]或 df.iloc[[4, 5], [1, 5]]或 df.iloc[4:6, [1, 5]]取第 5~6 行姓名、年龄列或取第 5~6 行第 2 列、第 6 列
df.iloc[4:9, 1:4]取 5~10 列第 2~5 列
追加、合并数据
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)
4)导出数据
# 写入 sanguo_result.csv 中,不输出索引值
df.to_csv('sanguo_result.csv', index=False)
来源:https://blog.csdn.net/xchenhao/article/details/128667563


猜你喜欢
- 人的大脑通过双眼来辨别视觉图形获取信息。大脑根据储存的经验,将所看到的视觉图形建立起优先级。由此可见,一个良好的视觉设计可以帮助大脑迅速有效
- 把昨天做的高级查询界面完善了一下,支持动态添加多个查询条件、定义逻辑关系,支持整形、浮点、字符串、日期、布尔值、自定义选择列表的录入,通过E
- print只是为了向用户显示一个字符串,表示计算机内部正在发生的事情。计算机却无法使用该print出现的内容。return是函数的返回值。该
- tips:在win10中查找SQL Server 2016配置管理器,用来开启SQL Server网络配置,启用实例TCP/IP协议和Nam
- 在编程时你一定碰到过时间触发的事件,在VB中有timer控件,而asp中没有,假如你要不停地查询数据库来等待一个返回结果的话,我想你一定知道
- 一、基本概念(查询语句)①基本语句1、“select * from 表名;”,—
- 一种有意思的数据结构-默克树(Merkle tree)默克树(Merkle tree)又叫hash树。程序员可以说自己不知道默克树,但是不能
- 1、从MYSQL官方下载MYSQL的源码版本【一定要是源码版本】 2、按以下代码键入LINUX命令行 [注] 添加mysql组和用户 #gr
- ES5为数组定义了5个迭代方法。每种方法都接收两个参数。要在每一项上运行的函数和(可选的)运行该函数的作用域对象--影响this的值。//其
- JWT(JSON Web Token)是一种基于JSON的安全令牌,可以用于在不同系统之间传输认证信息。在Go中实现JWT验证,可以通过标准
- 概述虽然现在关系型数据库越来越相似,但其背后的实现机制可能大相径庭。实际使用方面,因为SQL语法规范的存在使得我们熟悉多种关系型数据库并非难
- 使用python的turtle库画一个方格和圆打开python编译器,导入turtle库from turtle import *首先画一个距
- 当我们想对python中原有的模块进行覆盖,又不希望退出当前的程序,就需要用到重载的概念。这样既能使模块得到更新,又不影响解释器的使用。在导
- 前言说到二手房信息,不知道你们心里最先跳出来的公司(网站)是什么,反正我心里第一个跳出来的是网站是 58 同城。哎呦,我这暴脾气,想到就赶紧
- 1.计算机语言的基本概念 计算机语言(Computer Language) 指用于人与计算机之间的通信。2.解释型和编译型语言的区别 编译型
- SQLite3数据库的介绍和使用(面向业务编程-数据库)SQLite3介绍SQLite是一种用C语言实现的的SQL数据库它的特点有:轻量级、
- UserWarning: indexing with dtype torch.uint8 is now deprecated, please
- 在计算机科学中,精确的小数计算是一个常见的问题,因为在计算机中使用二进制表示小数时,有些小数可能无法用二进制表示精确的十进制数。这导致了在计
- 编码问题因为涉及到中文,所以必然地涉及到了编码的问题,这一次借这个机会算是彻底搞清楚了。问题要从文字的编码讲起。原本的英文编码只有0~255
- 在这个abc.php文件中写入如下代码。<?php phpinfo(); ?>你将会看到一个网页,网页内容通常,如下图所示:用中