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

news/2024/11/19 17:28:22/

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

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

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

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

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

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

文章目录

  • 访问和修改数据
    • 使用访问器获取数据
    • 使用访问器设置数据
  • DataFrame 列操作
    • 列的选取
    • 列间的数据运算
    • 列的条件判断过滤
    • 行数据插入和删除
    • 列数据插入和删除
    • 列数据赋值
    • 列分配

访问和修改数据

使用访问器获取数据

除了使用 .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:, '生年'] = 0df['生年']

输出结果:

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

DataFrame 列操作

列的选取

设置和删除列的工作原理与类似的dict操作相同。

dfone	two
a	1.0	1.0
b	2.0	2.0
c	3.0	3.0
d	NaN	4.0df['one']
a    1.0
b    2.0
c    3.0
d    NaN
Name: one, dtype: float64

列间的数据运算

df['three'] = df['one'] * df['two']
dfone		two		three
a	1.0		1.0		1.0
b	2.0		2.0		4.0
c	3.0		3.0		9.0
d	NaN		4.0		NaN

列的条件判断过滤

df['flag'] = df['one'] >= 2
dfone		two		three	flag
a	1.0		1.0		1.0		False
b	2.0		2.0		4.0		True
c	3.0		3.0		9.0		True
d	NaN		4.0		NaN		False

行数据插入和删除

创建要插入的新数据。

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['foo'] = 'bar'
dfone	flag	foo
a	1.0	False	bar
b	2.0	True	bar
c	3.0	True	bar
d	NaN	False	bar

数据不完整按照索引对齐。

df['one_trunc'] = df['one'][:2]
dfone	flag	foo	one_trunc
a	1.0	False	bar	1.0
b	2.0	True	bar	2.0
c	3.0	True	bar	NaN
d	NaN	False	bar	NaN

列分配

df_sample = pd.DataFrame({'A': range(1, 11), 'B': np.random.randn(10)})
df_sampleA	B
0	1	-0.266848
1	2	-1.509007
2	3	0.247194
3	4	-0.002303
4	5	0.231006
5	6	0.395786
6	7	0.379266
7	8	0.181075
8	9	0.863928
9	10	0.636367df_sample.assign(ln_A = lambda x: np.log(x.A), abs_B = lambda x: np.abs(x.B))A		B			ln_A		abs_B
0	1	-0.019896	0.000000	0.019896
1	2	0.924284	0.693147	0.924284
2	3	0.417785	1.098612	0.417785
3	4	-0.704264	1.386294	0.704264
4	5	0.829196	1.609438	0.829196
5	6	1.099349	1.791759	1.099349
6	7	1.223031	1.945910	1.223031
7	8	0.110445	2.079442	0.110445
8	9	1.257570	2.197225	1.257570
9	10	0.256807	2.302585	0.256807

http://www.ppmy.cn/news/238887.html

相关文章

fs基本使用

//文件下载 var fs require("fs"); var path require("path"); var request require("request");var download function (item) {let url"https://geo.datav.aliyun.com/areas_v3/bound/100000_full.json"// https://geo.datav.al…

Mac Xshell 下载 (FinallShell)

Mac Xshell 下载 找了好久 的Mac Xshell 下载 finallshell 找了好久 的Mac Xshell 下载 finallshell 自从换了Mac工作电脑 一直没有找到过好用的 Xshell,今天突然发现了这个。太好用了 FinalShell 官网:http://www.hostbuf.com/ 以下是从官网拷贝的。 FinalShell是…

s3fsfuse调试

这里由于是调试fuse操作,所以使用attach process的方式调试,方式参照《vscode使用attach process调试进程》这篇笔记 libfuse.so里面代码暂时不知道怎么跳进去 所以我这里挨个点进定义的首行代码打上断点。 一、测试ll /mnt/s3 s3fs_getattr s3fs_ac…

FS模式

1. 什么是FS模式?为什么要使用FS模式 S :动态的,静态的变量. F :不变的,常量. 最近在重构一系统,发现N多常量类,有此感受! FS模式是解决系统中存在大量常量类,管理混乱的问题. JAVA中常量类最好只有一个,便于查找.提高编码效率.加强可读性. 2. 怎么使用FS模式? 原则1: 对…

node-fs模块

fs模块 这篇文章来谈一谈node的内置模块之一fs文件系统模块。 有很多api,下面来说一下比较常见的api: 1.读取文件 readFile(path,callback) 异步操作 fs.readFile("../q.txt",(err,data)>{console.log(data);})readFileSync(path) 同步操作 con…

【node.js】fs 模块

fs 文件系统 fs (file system) 文件系统,属于 node.js 的核心模块,用于操作文件(夹) 使用 fs,需要先引入该模块 核心模块的标识就是模块的名字,这里就是 fs const fs require(fs);同步和异步调用 fs 模块中的操作有 2 种形式…

node的fs模块

node的fs模块 前几天一个月薪35k的兄弟,给我推了一个人工智能学习网站,看了一段时间挺有意思的。包括语音识别、机器翻译等从基础到实战都有,很详细,分享给大家。大家及时保存,说不定啥时候就没了。 一、简述 fs模块…

fs概述及基本使用

PRI是实际物理线路, sip trunk是ip虚拟连接 ACD(Automatic Call Distributor) 自动呼叫分配,也叫智能选择座席. ACD掌握坐席状态,是否分配呼叫 若acd未拦截,则sip终端代理(话机)能判别当前状态、指示用户放音、回复响应 IVR(In…