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
猜你喜欢
- 前言:最近某个时间开始,特别留意了一下Web标准中柱状图,也就是英文中的bar graph的实现。虽然实现方法各异,效果不尽相同,但是总体来
- 初步介绍 当然,我知道现在有成千上万个关于 用CSS处理圆角 的教程,但不管怎么说,我仍然想把这篇文章展示给您。也希望您会发现这篇文章会非常
- <?php// 使用Memache 作为进程锁 class lock_processlock{// key 的前缀protected
- 如下所示:plt.rcParams['savefig.dpi'] = 300 #图片像素plt.rcParams['
- 也许你听说过Hibernate的大名,但可能一直不了解它,也许你一直渴望使用它进行开发,那么本文正是你所需要的!在本文中,我向大家重点介绍H
- 目前流行的强化学习算法包括 Q-learning、SARSA、DDPG、A2C、PPO、DQN 和 TRPO。 这些算法已被用于在游戏、机器
- 相信很多与页面打过交道的同学都对 Yahoo 的 Best Practices for Speeding Up Your Web Site
- 方法1:/** 功能:数据备份/恢复文件简易方法* 以日期为单位,一天一个备份文件,以当天最后备份为准* 用提交表单的形式进行操作,* 其中
- 前言Github源码地址本文同时也是学习唐宇迪老师深度学习课程的一些理解与记录。文中代码是实现在TensorFlow下使用卷积神经网络(CN
- 今天来说说鄙人对input输入框在处理上的细节处理和心得,其实制作一个符合CSS标准、FF/IE7/IE6等主流浏览器全兼容、符合用户体验的
- 目录一、概念描述二、序列的可迭代性三、经典的迭代器模式四、生成器也是迭代器五、实现惰性迭代器六、使用生成器表达式简化惰性迭代器总结一、概念描
- SQL中的单记录函数 1.ASCII 返回与指定的字符对应的十进制数; SQL> select ascii('A')
- '****'函数名称: strReplace(Str)'函数功能: 过滤单引号'参数说明: Str 
- 今天写了一个放迅雷焦点广告的效果,还请大家多多指正,先附上效果图一张:相关文章:迅雷首页新闻图片轮播效果js源码首先是JS代码部分,之前一定
- 在Linux服务器管理中,内存是一个非常重要的资源。如果服务器的内存不足,可能会导致服务器崩溃或者无法正常工作。因此,检查Linux服务器内
- 本文实例讲述了python判断远程端口是否打开的方法。分享给大家供大家参考。具体实现方法如下:import socketsk = socke
- 对于SQL的新手,NULL值的概念常常会造成混淆,他们常认为NULL是与空字符串''相同的事。情况并非如此。例如,下述语句是
- 调用tf.reset_default_graph()重置计算图当在搭建网络查看计算图时,如果重复运行程序会导致重定义报错。为了可以在同一个线
- 本文实例演示了Python生成pdf文件的方法,是比较实用的功能,主要包含2个文件。具体实现方法如下:pdf.py文件如下:#!/usr/b
- 这篇文章主要介绍了原生Java操作mysql数据库过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要