dataframe修改数据_一篇文章带你查看并处理Pandas数据

本文介绍了Pandas库中数据查看、统计与处理的各种方法,包括描述性统计、排序、函数应用及表合并等内容,帮助读者快速掌握数据分析技能。

140d8a0b602dba298bc4e38a6f9d7bc4.png

07293c7c3ef1a50e0169a4bc4fca2eb2.png

今天我们将一下如何查看Pandas中的各类数据以及对Pandas进行处理的一些方法,通过这些方法我们可以更快的掌握Pandas对数据进行处理:

  • 描述与统计
  • 函数应用
  • 修改列/行索引名称
  • 类型的操作
  • 表合并的方式

一、描述与统计

有时会我们在获取到数据之后,想要查看一下数据的简单统计指标(比如最大值,最小值,平均值,中位数等等),如想要查看年龄的最大值,就可以直接对年龄这一列调用max方法就可以了。

5c91b0b97d9b0548324c9d672044d9f3.png

1、查看最大值

  • 查看众英雄中年龄最大的是多少岁,三种方式都可以查看

e74c3513deb80480d431051f8eb2ec84.png

第一种是使用np.max()对info表中的年龄列进行操作

第二种是使用np.max()对info表下的年龄进行操作

第三种是info表下的年龄进行max()查找

2、查看均值

  • 查看众英雄年龄的均值

5c0ff731937eda588f7884d358328293.png

类似的可以通过调用min、mean、quantile、sum 方法可以实现最小值、平均值、中位数以及求和。可以看到,对一个Series调用这几个方法之后,返回的都只是一个聚合结果。

3、按轴求和

下面给大家介绍一个有意思的方法:cumsum(),看这个方法的名字就能看出来它跟sum方法有点关系,应该是用来求和之类的,事实上的确如此,cumsum也是用来求和的,不过他是用来累加求和的,也就是通过它得到的结果与原始的Series或DataFrame的大小相同。

946ee42bbe2d14e8de21d1ef72479ed5.png

通过结果可以看到,cumsum最后的结果就是将上一次求和的结果与原始当前值求和作为当前值。

当然如果只是这种功能的话,也就没有那么有意思了,这个方法有意思的是可以对字符串类型的对象进行操作。

7bded33867f73a5223f3896ad93df9c6.png

4、查看表格信息

虽然说常见的各种统计值都有对应的方法,如果我想要得到多个指标的话,就需要调用多次方法,是不是显得有点麻烦呢?

Pandas 设计者自然也考虑到了这个问题,想要一次性获取多个统计指标,只需调用 describe 方法即可。

1257733db80aee3ecb006031528982b3.png

可以看到,直接调用describe方法后,会显示出数字类型的一些统计指标比如:总数,平均数,标准差,最小值,最大值,四分位数等

如果想要查看非数字类型的列的统计指标的话,可以设置include=[object]来获得数据。

db120ce95fcc9edf3aec4d2d36f111a9.png

6、统计某个值出现的次数:value_counts

  • 查看英雄们的城市和性别出现的次数

3485052b180ef3e4c3f3d279fe8f265d.png
  • 查看英雄的年龄分布

4f813dd3a84a2f6d19224d0faf64e1d2.png

7、查看最小值或最大值对应的索引

如果想要查看某列最大值或最小值对应的的索引可以使用idxmax或idxmin方法来完成。

如果索引不是数据的话将会返回该行的行数。

1f8e6f19c9cddf7e2e213234223320f6.png
  • 查看哪位英雄的年龄最小

dad9eceeb07a4dcdf43a619ea5aae1b9.png
  • 查看哪位英雄的年龄最大

2dbff2d4cf4f49d8785f1081e86d4d0f.png

8、离散化

有时候我们在处理数据的时候会碰到一些需求,比如想要将年龄进行离散化,也就是将年龄分成几个区间,这里我们想要将年龄分成三个区间段,就可以使用pandas的cut方法来完成。

eefc59c3ef1fbb6886b3b9854b85252d.png

通过这个结果可以看到,cut自动生成了等距的离散区间,如果自己想定义也是没有问题的。

2f0b78625550f03da866e1dba69f7845.png

这里我们将区间定义为3个区间,1-30之间属于青少年英雄,30-60之间的属于中年英雄,60-5000就属于不正常的的地球英雄了。有时候离散化之后,想要给每个区间起一个名字,那么我们可以指定labels参数

3f1db5546cfed8e4262068e242f08a65.png
  • 给英雄们添加一列中青年属性

使用loc[]给表添加列

26706639b03cdac0e7505f5bd9eab8d6.png

6a2f8ef1d75673d1351563dff3f14139.png

除了可以使用cut进行离散化之外,qcut也可以实现离散化。Cut是根据每个值的大小来进行离散化,qcut是根据每个值出现的次数进行离散化的。

c8b0ad6d410f204365a85adaf9048db5.png

9、排序功能

在进行数据分析时,少不了的就是进行数据排序。Pandas支持两种排序方式:按轴(索引或列)排序和按实际值排序。

08bbd712af6d6d0270ed5e8d790e132a.png

9.1、按索引排序

  • Sort_index()方法默认是按照索引进行正序排列

667a18275d469bbbdc928c773c40e6a7.png

下面这个是英文索引下的排序

6c027ec7d48de32fcb061954f03cd28f.png

1454abde85b4f39bc73d5b97703628f4.png
  • 还可以通过sort_values(by=’’)进行排序,by的意思是通过什么区排序,直接填写也可以。

按性别排序:

00c37d5484a8719f6494f99db0ac6b5b.png

按年龄排序:

f64ee4fa8c7905296955cbc93e3ca0f0.png

如果想要进行倒序排列,可以设置参数axis=1或则ascending=False

123de6706aba07be1125a42e321422fb.png

9.2、按值排序

如果想要实现按照实际值来排序,例如想要按照年龄排序。

使用sort_values方法,参数设置by=age即可

ed09059f10aea82758609d92218c6e43.png

有时候我们可能需要按照多个值来排序,例如:按照年龄和城市来一起排序,可以设置参数 by 为一个 list 即可,需要注意的是:list 中每个元素的顺序会影响排序优先级的,先分组在排序,最后一个为排序标准。

25efde16d8b84adf240a49759bc1db81.png

764c9b46bb14b32e33cf2a7c0761f450.png

1dd28320fd795d69aafa3ee8dcd6e335.png

有时候数据量太大的时候,我们可能只需要看前几行或者后几行的数据,那么这个时候我们就可以用head()和tail()方法查看,head()方法默认只打印前5行内容,括号内可以填写想要的行数,tail()方法同理,只不过tail()方法是查看后五行的数据。

7627288d28415a0d6ab24de1de5fff06.png

一般在排序后,我们可能需要获取最大的n个值或最小值的n个值,我们可以使用 nlargest 和 nsmallest 方法来完成,这比先进行排序,再使用 head(n)方法快得多。

0496e7dffc6c1aa7aac88fb9a1286393.png

f0e8a43db8133bbe692bf3e66975ff69.png

6c92aeedb3b4ed7dd8f1f517999b080f.png

dd0364aacf1d1772f8718d83c4150ef7.png

二、函数应用

1.根据现有列生成新的列

91b392bf3896d2eb8977c2586018c3e1.png
  • 生成一列元素为英雄年龄对数的

7d3fe227f1e94f74a0223bb1a1f354d3.png
  • 生成一列身高列

848cf48241aa48cbae85ca394602c64f.png
  • 生成一列年龄加一的列

9c1dcb8667fa6609778f24dc9c2df2a7.png

87cbbeb6451964e5fd9fdefb5d25cd80.png
  • 经过了复联4后,英雄们通过各种战斗现在都统一长高了10厘米,现在再表格中添加一列英雄们的新身高

aed4f37700fb3eff0d1789fe6a515097.png
  • 现在给英雄表中添加一列性别代码列,1代表女士,0代表男式

882af49bd4d2a627fa10d2273178db3c.png

2、常用函数

虽说 Pandas 为我们提供了非常丰富的函数,有时候我们可能需要自己定制一些函数,并将它应用到 DataFrame 或 Series。常用到的函数有map、apply、applymap。

  • Map是是 Series 中特有的方法,通过它可以对 Series 中的每个元素实现转换。如果想通过年龄判断用户是否属于中年人(50岁以上为中年),通过 map 可以轻松搞定它。

f0dc9c403a83f264467e95b353a16994.png

又比如我们可以通过城市来判断地球还是外星,我们可以这么操作。

a6687008dc9c672369780ed6a15123b2.png
  • Apply方法: apply 方法既支持 Series,也支持 DataFrame,在对 Series 操作时会作用到每个值上,在对 DataFrame 操作时会作用到所有行或所有列(通过 axis参数控制)。

v2-9388fc5ca39b2e36646bef173747b38e_b.jpg

对于series来说,apply方法和map方法差别不大

efeacb8ecb56543991b1e326eb0ae491.png

但是对于DataFrame来说,apply方法的作用对象是一行或一列数据

1bf7e5a43ad69389c4962da237a36958.png
  • Applymap: applymap方法针对于DataFrame,它作用于DataFrame中的每个元素,它对DataFrame的效果类似于apply对 Series 的效果。

5029d0758054cbd8897e88fd36cc93f3.png

三、修改列/索引名称

在使用 DataFrame 的过程中,经常会遇到修改列名,索引名等情况。使用 rename 轻松可以实现。修改列名只需要设置参数 columns 即可。

657a02d8387150edd5bc8054cafb870f.png
  • 将钢铁侠和索尔的身高改为170

33cbc3a4cbcb544bd4009dc04508bbc9.png
  • 生成一列字符串格式的身高列

6aea02dc2f4c60442f89fb07dbdc0299.png
  • 更改索引列名称

0a793b26b51b32087afb9bdf1c9dfb8f.png
  • 修改列标签,将年龄改为age,城市改为city,性别改为sex

14b82f07589ece576ffe726274fd79e4.png
  • 类似的修改索引名只需要修改参数index就可以了

b52b5f180ce2e0b59bb49b9100e80090.png

四、类型操作

1、get_dtype_counts()

如果想要获取每种类型的列数的话,可以使用 get_dtype_counts 方法

5479f999bbb4034810a16ad275e7d68e.png

2、 astype()

如果想要转换数据类型的话,可以通过astype来完成

2.1、生成一列年龄的对数列,并且列元素元素为整数列

  • 首先使用np.log生成一列对数列

a1ec12e4a37ec3e7c597ff50a6fae487.png
  • 使用round()函数将对数列四舍五入

f001e1c5587aedb986821a4724f113e0.png
  • 使用astype()将对数列转为整数列

12ad7e4a5d465192e9fd3ec7f4db39de.png

2.2将年龄列改为浮点型

aed3139b7f3c7e8f1304778bda215301.png

3、其他方法

有时候会涉及到将 object 类型转为其他类型,常见的有转为数字、日期、时间差,Pandas 中分别对应 to_numeric、to_datetime、to_timedelta 方法。

五、表合并的方式

1、append()方式

  • 导入两个表

f2e9617a01afef65af192e186770a01f.png
  • 查看两个表的内容

0e22d43142c335b07ff5293476ef821c.png

fd339a62a9f6ec0432e28bed7cdb07e3.png
  • 使用append()方法将2表导入到1表中

cdc6697a1aad0626d56149693bbf7e5b.png

2、concat()

2.1、纵向合并(axis=0(默认为0))

99dbe5d833f3ece12697d5b17275c4f1.png

31cbd00052fb1c3c3726825ea6913910.png

2.2、横向合并(axis=1)

89836646f1a502f5e390d277e16d1738.png
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值