Python数据攻略-Pandas常用数据操作

news2024/12/23 18:34:46

大家好,我是Mr数据杨。今天我将带领各位走进Python的奇妙世界,就像步入三国演义那样热闹且复杂的战争年代。这里,数据就像那些智勇双全的武将和策士,我们要学习如何访问和修改它们,就如同诸葛亮那样掌控战局。

先来理解一下如何使用访问器获取和设置数据。这就好比郭嘉在典韦死后得知曹操对他的感激和痛惜的心情,然后再妥善安排后续事务。在Python中也能通过访问器获取数据的信息,再对其进行修改。

接下来将学习DataFrame的列操作,包括选取列、列间数据运算和过滤列。就像周瑜用火攻击策略可以选取数据,进行运算和过滤,从而达到想要的结果。

再来是行数据的插入和删除,这好比战场上将士的阵亡和新兵的加入。还会学习如何在DataFrame中插入和删除列数据,这就如同在三国演义中,新的谋士如司马懿的加入和老将如张辽的离去。

最后还将探讨列数据的赋值和分配。当刘备得到荆州,却又需要交出荆州时,他就在进行数据赋值和分配,Python也可以这样操作数据。

今天的教程就像一场三国演义般的大战,让我们用智慧和勇气一同开启Python的学习之旅!

文章目录

  • Pandas 数据访问
    • 预览数据
    • 使用访问器获取数据
    • 使用访问器设置数据
    • 数据类型重新定义
  • Pandas 检查数据
    • 显示数据类型
    • 显示基础统计
    • 探索数据集
  • Pandas 清理数据
    • 缺失值
    • 无效值
    • 不一致的值
  • DataFrame 列操作
    • 列的条件选取
    • 列间的数据运算
    • 行数据插入和删除
    • 列数据插入和删除
    • 列数据赋值
  • Pandas 分组和聚合
  • Pandas 可视化

Pandas 数据访问

预览数据

在这个部分中将学习如何直接从Excel文件中读取数据,并进行一些相关的操作。

查看的数据基本信息。

import pandas as pd
# 读取数据
df = pd.read_excel("Romance of the Three Kingdoms 13/人物详情数据.xlsx")

# 数据类型
type(df) 
<class 'pandas.core.frame.DataFrame'>

# 行数
len(df) 
857

# 行、列数
df.shape  
(857, 45)

数据的预览。

# 查看前5行数据
df.head()

在这里插入图片描述

可以看到一列省略号 (…) 表示缺失的数据。可以进行设置为滚动条显示。

pd.set_option("display.max.columns", 2)

# 显示最后5行数据
df.tail()

在这里插入图片描述

使用访问器获取数据

除了使用 .loc[] 访问器通过索引获取行或列的数据之外,Pandas还提供了 .iloc[] 访问器,它通过整数索引来检索行或列。

示例代码:

df.loc[10]

输出结果:

名前                                                      阿会喃
字                                                         -
读み                                                        -
性别                                                        男
生年                                                      190
登场                                                      217
没年                                                      225
...
酒\n興味                                                    あり
物欲                                                       强欲
Name: 10, dtype: object
df.iloc[0]

输出结果:

名前                                                      阿会喃
字                                                         -
读み                                                        -
性别                                                        男
生年                                                      190
登场                                                      217
没年                                                      225
...
酒\n興味                                                    あり
物欲                                                       强欲
Name: 10, dtype: object

.loc[].iloc[] 支持切片和类似NumPy的索引操作。

示例代码:

df.loc[:, '名前']

输出结果:

10    阿会喃
11     韋昭
12     伊籍
13     尹賞
14    尹大目
Name: 名前, dtype: object
df.iloc[:, 1]

输出结果:

10    阿会喃
11     韋昭
12     伊籍
13     尹賞
14    尹大目
Name: 名前, dtype: object

可以使用切片、列表或数组来获取多行或多列的数据。

示例代码:

df.loc[11:15, ['名前', '字']]

输出结果:

     名前	字
11	韋昭	弘嗣
12	伊籍	機伯
13	尹賞	-
14	尹大目	-
df.iloc[1:6, [0, 1]]

输出结果:

     名前	字
11	韋昭	弘嗣
12	伊籍	機伯
13	尹賞	-
14	尹大目	-

.iloc[] 可以使用与切片元组、列表和NumPy数组相同的方式跳过行和列。

示例代码:

df.iloc[1:6:2, 0]

输出结果:

11    韋昭
13    尹賞
Name: 名前, dtype: object

还可以使用Python内置的 slice() 类、numpy.s_[] 或者 pd.IndexSlice[]

示例代码:

df

.iloc[slice(1, 6, 2), 0]

输出结果:

11    韋昭
13    尹賞
Name: 名前, dtype: object
df.iloc[np.s_[1:6:2], 0]

输出结果:

11    韋昭
13    尹賞
Name: 名前, dtype: object
df.iloc[pd.IndexSlice[1:6:2], 0]

输出结果:

11    韋昭
13    尹賞
Name: 名前, dtype: object

使用 .loc[].iloc[] 获取特定的数据值。但是当只需要单个值时,建议使用专门的访问器 .at[].iat[]

示例代码:

df.at[12, '名前']

输出结果:

'伊籍'
df.iat[2, 0]

输出结果:

'伊籍'

使用访问器设置数据

可以使用访问器来修改数据,可以传递Python序列、NumPy数组或单个值来修改数据。

示例代码:

df.loc[:13, '生年'] = [40, 50, 60, 70]
df.loc[14:, '生年'] = 0

df['生年']

输出结果:

10    40
11    50
12    60
13    70
14     0
Name: 生年, dtype: int64

可以使用负索引 .iloc[] 来访问或修改数据。

示例代码:

df.iloc[:, -10] = np.array([88.0, 79.0, 81.0, 80.0, 68.0, 61.0, 84.0])
df['生年']

输出结果:

10    88.0
11    79.0
12    81.0
13    80.0
14    68.0
Name: 生年, dtype: float64

数据类型重新定义

这里重新定义的数据类型是根据列全部重新定义。重新定义 object 直接赋值修改数据类型。

df["寿命"] = df["寿命"].astype('object')

在这里插入图片描述

Pandas 检查数据

在这个部分将学习如何检查数据的类型以及进行基本的统计操作。

显示数据类型

可以看到数据类型包括int64和object。Pandas使用NumPy库来处理这些数据类型。数据类型 int64 和 object。

df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 857 entries, 0 to 856
Data columns (total 45 columns):
名前       857 non-null object857 non-null object
読み       857 non-null object
性別       857 non-null object
生年       857 non-null int64
登場       857 non-null int64
没年       857 non-null int64
寿命       857 non-null int64
死因       857 non-null object
父親       857 non-null object
母親       857 non-null object
相性       857 non-null object
列伝       857 non-null object
商業       857 non-null int64
農業       857 non-null int64
文化       857 non-null int64
訓練       857 non-null int64
巡察       857 non-null int64
説破       857 non-null int64
交渉       857 non-null int64
弁舌       857 non-null int64
人徳       857 non-null int64
威風       857 non-null int64
神速       857 non-null int64
奮戦       857 non-null int64
連戦       857 non-null int64
攻城       857 non-null int64
兵器       857 non-null int64
堅守       857 non-null int64
水連       857 non-null int64
一騎       857 non-null int64
豪傑       857 non-null int64
鬼謀       857 non-null int64
音声       857 non-null object
武器       857 non-null object
性格       857 non-null object
義理       857 non-null object
勇愛       857 non-null object
才愛       857 non-null object
分類       857 non-null object
武具
興味    857 non-null object
書物
興味    857 non-null object
宝物
興味    857 non-null object
酒
興味     857 non-null object
物欲       857 non-null object
dtypes: int64(24), object(21)
memory usage: 301.4+ KB

显示基础统计

该方法可以显示所有数字列的一些基本描述性统计信息。

df.describe()

在这里插入图片描述
使用 include 参数可以查看其他数据类型。不会计算 object 列的平均值或标准差,只显示一些描述性统计信息。

import numpy as np
df.describe(include=object)

在这里插入图片描述

探索数据集

探索性数据分析可以回答关于数据集的一些问题。

例如特定值在列中出现的频率。

df["性格"].value_counts()

冷静    290
豪胆    223
小心    178
猪突    1651
Name: 性格, dtype: int64


df["分類"].value_counts()

武官    520
文官    3361
Name: 分類, dtype: int64

Pandas 清理数据

在这个部分将学习如何清理数据中的缺失值、无效值和不一致的值。

缺失值

处理包含缺失值的记录的最简单方法是忽略或者删除。

df_drop = df.dropna()

缺失值也可以进行填充。

df_drop  = df.copy()
df_drop ["字"].fillna(
    value="-",
    inplace=True
)

无效值

无效值可能比缺失值更难处理,也会为后续的数据分析操作造成各种不可未知的麻烦。这个需要根据自己对业务的理解剔除相关不合理的或者异常的数据。

不一致的值

可以定义一些互斥的查询条件,并验证这些条件不会同时出现。

判断出生年小于死亡年。

df[(df["没年"] > df["生年"]).empty
False

幸运的是这两个查询都返回一个空的DataFrame证明不存在不一致的数据。

DataFrame 列操作

列的条件选取

可以根据索引访问庞大数据集的子集,意味着可以根据索引来查询数据。

筛选200年后出生的人物。

born_date = df[df["生年"] > 200]
born_date.shape

(189, 45)

选定姓名中字为 - 的人物。

not_null_data = df[df["字"]!="-"]
not_null_data.shape

(381, 45)

选择姓为曹的人物。

people = df[df["名前"].str.startswith("曹")]
people.shape

(25, 45)

多条件搜索使用 & 符号。

df[
    (df["名前"].str.startswith("曹")) &
    (df["生年"] > 200) &
    (df["分類"] == "文官")
]

在这里插入图片描述

列间的数据运算

创建原 df 的副本DataFrame 使用。

df_ = df.copy()
df_.shape

(857, 45)

自定义列间减法求寿命。

df["life"] = df["没年"] - df["生年"]
df["life"]

0      35
1      69
2      64
3      66
4      59
       ..
852    99
853    98
854    98
855    98
856    98
Name: life, Length: 857, dtype: int64
df["difference"].max()
68

列名可以重新自定义。

renamed_df = df.rename(
    columns={"生年": "born", "没年": "death"}
)

在这里插入图片描述
也可以删除不需要的行或者列。

renamed_df.shape
(857, 46)

del_columns = ["寿命"]
# 这里需要指定 axis = 1 为列,axis = 0 为行
renamed_df.drop(del_columns , inplace=True, axis=1)
df.shape
(857, 45)

行数据插入和删除

创建要插入的新数据。

new = pd.Series(data=['Mr数据杨', 'xxx', "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-"], index=df.columns)

new

输出结果:

名前        Mr数据杨
字           xxx
读み            -
性别            -
生年            -
登场            -
没年            -
...
酒\n興味        -
物欲           -
dtype: object

使用 df.append() 将新数据加入DataFrame。

df = df.append(pd.DataFrame(new).T)
df

输出结果:

在这里插入图片描述

使用 df.drop() 删除新数据。

df = df.drop(labels=[17])
df

输出结果:

在这里插入图片描述

列数据插入和删除

可以直接赋值来定义新列的名称和数据。

示例代码:

df['temp_data'] = np.array([71.0, 95.0, 88.0, 79.0, 91.0])
df

输出结果:

在这里插入图片描述

可以将新列的所有值设置为0。

示例代码:

df['temp_data'] = 0.0
df

输出结果:

在这里插入图片描述

使用 .insert() 在指定位置插入列数据。

示例代码:

df.insert(loc=4, column='new_temp_data', value=np.array([86.0, 81.0, 78.0, 88.0, 74.0, 70.0, 81.0]))
df

输出结果:

在这里插入图片描述

使用 del 关键字删除一列或多列。

示例代码:

del df['new_temp_data']
df

输出结果:

在这里插入图片描述

使用 df.drop() 删除列。

示例代码:

df = df.drop(labels='age', axis=1)
df

输出结果:

在这里插入图片描述

列数据赋值

赋值标量自动在列里广播填充。

df['名前'] = 'xxxxx'
df

Pandas 分组和聚合

Pandas 库提供了分组和聚合函数进行各种数据的统计操作。

Series 有 20 多种不同的方法来计算描述性统计量。

A_.sum()
6

A_.min()
1

DataFrame 可以有多个列可以进行聚合分组操作。

根据 分類聚合,求和寿命列数据。

df.groupby("分類", sort=False)["寿命"].mean()

分類
武官     51.646154
文官     58.220238104.000000
Name: 寿命, dtype: float64

Pandas 可视化

Series 和 DataFrame对象都有一个 .plot() 方法绘制可视化图。

"""
# 可选的图标模式有
    - 'line' : 折线图
    - 'bar' : 柱状图
    - 'hist' : 直方图
    - 'box' : 箱线图
	.....
"""

data = df["性格"].value_counts()
data.plot('bar')

在这里插入图片描述

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

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

相关文章

1+X 大数据应用开发(Java)理论题库(中级题4)

文章目录 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 1 <ALL表示小于最小 2 大于ANY表示大于最小值 3 LEFT OUTER JOIN 等同于LEFT JOIN 4 5 6 substr(string string,num start,num length); string为字符串&#x…

1160万美元!美国匹兹堡大学批准贷款建设量子信息核心WPQIC

​ 宾夕法尼亚州西部量子信息中心的首任主任Michael Hatridge教授展示量子信息科学和工程的技术实践&#xff08;图片来源&#xff1a;网络&#xff09; 量子物理学是植根于计算机、网络和传感器的有形世界。为了开创量子技术的新时代&#xff0c;研究人员需要可专用的定制化设…

Linux系统编程学习 NO.6 ——yum、Linux生态、vim的介绍

文章目录 1.Linux的安装软件的方式2.Linux的软件生态2.1.软件生态的概念2.2.Linux的软件生态 3.Linux生态4.yum安装软件4.1.验证网络4.2.使用yum安装lrzsz4.2.1.什么是lrzsz4.2.2.安装lrzsz 4.3.yum是如何找到官方yum源安装的软件呢&#xff1f;4.4.简单介绍扩展yum源4.5.关于y…

Mysql进阶【2】论述锁机制,SQL加锁情况

1.MySQL 的锁机制 1.1按粒度分有三种&#xff1a; 全局锁&#xff1a;核心服务层实现&#xff0c;锁住数据库&#xff0c;full table with read lock;表级锁&#xff1a;核心服务层实现&#xff0c;锁住数据库中的某张表 加表级读锁&#xff1a;本事务不能读取其他未加锁的表…

大数据存储与处理技术探索:Hadoop HDFS与Amazon S3的无尽可能性【上进小菜猪大数据】

上进小菜猪&#xff0c;沈工大软件工程专业&#xff0c;爱好敲代码&#xff0c;持续输出干货。 大数据时代带来了数据规模的爆炸性增长&#xff0c;对于高效存储和处理海量数据的需求也日益迫切。本文将探索两种重要的大数据存储与处理技术&#xff1a;Hadoop HDFS和Amazon S3…

Sqoop ---- Sqoop一些常用命令及参数

Sqoop ---- Sqoop一些常用命令及参数 1. 常用命令列举2. 命令&参数详解1. 公用参数&#xff1a;数据库连接2. 公用参数&#xff1a;import3. 公用参数&#xff1a;export4. 公用参数&#xff1a;hive5. 命令&参数&#xff1a;import6. 命令&参数&#xff1a;export…

设计模式(行为型模式)之:Template Method(模板方法)

文章目录 简介动机定义 早绑定代码晚绑定 模板设计模式对比分析总结 简介 该篇文章内容及思想出自 张建忠《设计模式》、GOF: 《设计模式》 定义一个操作中算法的骨架&#xff0c;而将一些操作延迟到子类中。TemplateMethod使得子类可以不改变一个算法的结构&#xff0c;即可重…

智能监控和汽车领域中的网络边缘嵌入式视觉最佳选择——低功耗ECP5 FPGA LFE5U-25F-8BG256I 莱迪思深力科

莱迪思深力科LFE5U-25F-8BG256I&#xff0c;属于ECP5系列。它拥有24,300个LUT&#xff08;Look-Up Table&#xff09;&#xff0c;可编程逻辑块&#xff0c;是一款高性能的可编程逻辑器件&#xff0c;具有高性能、灵活性和可编程性的FPGA芯片&#xff0c;适用于多个领域的高性能…

公众号开发小程序,为品牌拓展更广阔的市场!

公众号开发小程序是指在微信公众号平台上开发出一种类似于手机App的轻量级应用&#xff0c;能够给用户提供更加便捷、快速、个性化的服务和体验。 相比于传统的应用&#xff0c;公众号开发小程序有如下优势&#xff1a; 1、提升用户体验&#xff1a;相比于网页应用&#xff0c…

边缘云风口正酣,边缘一体化服务是竞争关键

连接世界从边缘开始&#xff0c; 重新定义公有云的未来 【全球云观察 &#xff5c; 热点关注】公有云已经进入白热化竞争阶段&#xff0c;从当初的云资源竞争&#xff0c;到当下更细分的云服务竞争&#xff0c;随着云计算服务市场继续蓬勃发展&#xff0c;正在催生出多样化的非…

【Spring Boot学习】今天是我的生日,舍友催我去吃饭,我还是坚持写完了Spring Boot配置文件,祝自己生日快乐哈

前言: 大家好,我是良辰丫,上一篇文章中我们已经学习了Spring Boot项目的的创建,今天我们会学习Spring Boot的配置文件,在今天的学习中我们会遇到许多我们不认识的注解,这些注解是Spring MVC中的,我们后续会介绍,大家先不用管这些注解是什么意思.那么,为什么不先学习MVC呢?我想…

5.9 使用Vue CLI创建VUE项目

使用Vue CLI创建VUE项目 目录一、 开发前准备1. 搭建NodeJS环境2. 环境确认3.开发工具 二、创建一个新的VUE项目1. 命令创建新的vue项目2. 选择项目模板3. 选择项目配置4. 选择项目版本5. 选择配置文件存放位置6. 是否将当前的项目配置保存为预设7. 完成构建 三、启动项目 目录…

Yolov3 模型构建和深入掌握快速搭建网络的搭积木方法

&#xff08;一&#xff09;设计Conv2dBatchLeaky 1、了解LeakyReLU激活函数 LeakyReLU 激活层&#xff0c;创建一个可调用对象以计算输入 x 的 LeakReLU 。其中&#xff0c;x为输入的 Tensor 感觉和飞桨的api有点相同&#xff0c;可以对照参考理解&#xff1a; LeakyReLU激活…

【JavaEE】HTTP应用层协议

HTTP应用层协议 文章目录 JavaEE & HTTP应用层协议1. HTTP的报文协议格式1.1 fiddler介绍1.2 HTTP请求1.3 HTTP响应 2. HTTP请求与响应2.1 首行2.1.1 http方法2.1.2 URL2.1.3 版本号 2.2 header与空行2.2.1 Host2.2.2 Content-Type 与 Content-Length2.2.3 User-Agent&…

chatgpt赋能python:Python编程中如何取消上一步操作

Python编程中如何取消上一步操作 Python是一种强大的编程语言&#xff0c;被广泛应用于数据科学、机器学习、Web开发等众多领域。在Python编程过程中&#xff0c;有时会发生一些错误或者需求发生变化&#xff0c;但我们又不想完全重写代码来解决这些问题。这时&#xff0c;我们…

OpenStack部署(一)

OpenStack部署 1. 流程介绍1.1 模块关联1.2 虚拟机创建流程 2. 部署2.1 服务器规划2.2 环境整备1. 配置控制节点域名/计算节点解析2. 关闭控制节点/计算节点selinux和防火墙3. 安装与配置控制节点/计算节点的时间同步服务4. 在控制节点/计算节点执行命令验证时间同步服务5. 在控…

AI文本生成视频,根据文字就能一键生成视频的模型

const name "AI生成视频";console.log(name); 可以从给定的文字内容就能生成短视频&#xff0c;基于文本到图像生成技术&#xff0c;该技术旨在实现文本到视频的生成&#xff0c;可以通过文本生成独一无二的视频&#xff0c;将无限的想象力带入生活。 我们来看看文…

XShell 7 中文版一键安装激活教程

Xshell 7是一款功能强大的终端模拟器&#xff0c;支持SSh2&#xff0c;SSh3&#xff0c;SFTP&#xff0c;TELNET&#xff0c;RLOGIN和SERIAL。通过提供业界先进的性能&#xff0c;Xshell包含了其他SSH客户端无法发现的功能和优势。 Xshell是一款功能强大且安全的终端模拟器&…

12 【nextTick 过渡与动画】

1.nextTick 这是一个生命周期钩子 语法&#xff1a;this.$nextTick(回调函数)作用&#xff1a;在下一次 DOM 更新结束后执行其指定的回调。什么时候用&#xff1a;当改变数据后&#xff0c;要基于更新后的新DOM进行某些操作时&#xff0c;要在nextTick所指定的回调函数中执行…

工厂智慧能源-AcrelCloud-5000智慧能源综合解决方案

功能&#xff1a; AcrelCloud-5000能耗管理云平台采用泛在物联、云计算、大数据、移动通讯、智能传感等技术手段可为用户提供能源数据、统计分析、能效分析、用能预警、设备管理等服务&#xff0c;平台可以广泛应用于多种领域。 ​ 应用场所&#xff1a; 云平台结构&#xf…