前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >pandas库的简单介绍(3)

pandas库的简单介绍(3)

作者头像
python数据可视化之路
发布2023-02-23 21:23:59
1.2K0
发布2023-02-23 21:23:59
举报

4 pandas基本功能

4.1 重建索引(见上一篇文章)

4.2 数据选择

pandas的数据选择是十分重要的一个操作,它的操作与数组类似,但是pandas的数据选择与数组不同。当选择标签作为索引,会选择数据尾部,当为整数索引,则不包括尾部。例如列表a[0, 1, 2, 3, 4]中,a[1:3]的值为1,2;而pandas中为1,2,3。

数据选择的方法:1、直接选择;2、使用loc选择数据;3、使用iloc选择数据。

直接选择中,frame[[列名,列名]]表示选择列,frame[:3]表示选择行。

loc是根据轴标签进行选择,frame[行标签1,[列名,列名]]。

iloc是根据整数标签进行选择,frame[:1,[1,2]]选择第一行的第一、二列。

代码语言:javascript
复制
import pandas as pd
import numpy as np
frame = pd.DataFrame(np.arange(16).reshape(4, 4),
                    index = ['Ohio', 'Colorado', 'Utah', 'New York'],
                    columns = ['one', 'two', 'three', 'four'])
print(frame)
print('直接选择(列):\n',frame[['one', 'two']]) #直接选择
print('直接选择(行):\n',frame[:2]) #直接选择

直接选择

代码语言:javascript
复制
print('使用loc进行选择:\n', frame.loc['Utah', ['two', 'three']]) #使用loc进行选择
print('使用loc进行选择:\n', frame.loc[:'Utah', ['two', 'three']]) #使用loc进行选择
print('使用iloc进行选择:\n', frame.iloc[[1, 3], [1, 3]]) #使用iloc选择数据
print('使用iloc进行选择:\n', frame.iloc[:, :3][frame.three > 5]) #使用iloc选择数据)

使用loc和iloc选择数据


DataFrame索引选项

类型

描述

df[val]

从DataFrame中选择单列或多列或行(整数表示选择行)

df.loc[val]

根据标签选择单行或多行

df.loc[:, val]

根据标签选择单列或多列

df.loc[val1, val2]

根据标签同时选中行和列的一部分

df.iloc[where]

根据整数选择一行或多行

df.iloc[:, where]

根据整数选择一列或多列

df.iloc[where_i, where_i]

根据整数选择行和列

df.at[label_i, label_i]

根据行列的标签位置选择单个标量值

df.iat[i, j]

根据行列的整数位置选择单个标量值

reindex方法

通过标签选择行和列

get_value, set_value方法

根据行和列的标签设置单个值

灵活运用前9个方法对后续批量数据清洗和处理有很大的帮助。

4.3 对象的相加和使用填充值算法

不同对象(Series和DataFrame)之间的算术行为是pandas提供的一项重要功能。在pandas库的简单介绍(1)已经介绍过Series对象相加的例子,这里说明一下DataFrame对象的加减。

代码语言:javascript
复制
frame1 = pd.DataFrame(np.arange(12).reshape((3, 4)),
                      columns = list('abcd'))
frame2 = pd.DataFrame(np.arange(20).reshape((4, 5)),
                      columns = list('abcde'))
print('frame1:\n', frame1)
print('frame2:\n', frame2)
frame1+frame2

由上可知,DataFrame对象的加法与Series加法类似,如果有一个为缺失值,结果就是缺失值。

frame1通过利用add方法,将f2和fill_value作为参数传入:

代码语言:javascript
复制
frame1.add(frame2, fill_value = 0)

可以看出fill_value将缺失值的一方作为0处理。

同样的,也可以在重建索引指定填充值。

代码语言:javascript
复制
frame1.reindex(columns = frame2.columns, fill_value = 0)

重建索引后的frame1

4.4 函数应用和映射

函数应用可以对全部数据或某一列、某一行进行操作。

Numpy的通用函数(逐元素数组方法)对pandas对象也有效。

代码语言:javascript
复制
frame = pd.DataFrame(np.random.randn(4, 3), columns = list('abc'),
                    index = ['Ohio', 'Colorado', 'Utah', 'New York'])
print(frame)
np.abs(frame) #使用了np的abs(绝对值)方法

另外一个常用操作是将函数应用到一行或一列的一维数组上,DataFrame的apply方法可以实现这个功能,是个很有用的方法。

代码语言:javascript
复制
f = lambda x: x.max() - x.min()
print('行上计算:\n', frame.apply(f)) #默认在行上进行计算
frame.apply(f, axis = 'columns') #传入columns在列上计算

利用apply不仅可以返回标量值,也可以返回Series对象。

代码语言:javascript
复制
def f(x):
    return pd.Series([x.min(), x.max(), x.mean(), x.max()-x.min()], index = ['最小值', '最大值', '平均值', '极差'])
frame.apply(f)

4.5 排序

排序时对数据集的重要操作,有时候我们把数据输出到excel并要求排序,我们就需要用到该操作。

Series对象用sort_index排序;而DataFrame利用sort_index方法和sort_values方法排序,sort_index根据索引进行排序,sort_values根据值排序。

在sort_index中,可以传入axis参数和ascending参数进行排序,默认按索引升序排序,当为frame1.sort_index(axis=1, ascending=False)表示在列上降序排列。

代码语言:javascript
复制
frame1 = pd.DataFrame(np.arange(8).reshape((2, 4)),
                     index = ['three', 'one'],
                     columns = ['a', 'c', 'd', 'b'])
print('frame1:\n', frame1)
print('\n默认排序:\n', frame1.sort_index())
print('\n按照列排序且降序:\n', frame1.sort_index(axis = 1, ascending = False))
代码语言:javascript
复制
print('\n按照值排序:\n', frame1.sort_values(by = ['a', 'b']))
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-01-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 python数据可视化之美 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档