IT教程 ·

小白学 Python 数据剖析(6):Pandas (五)基础操作(2)数据选择

手把手带你阅读Mybatis源码(一)构造篇

小白学 Python 数据剖析(6):Pandas (五)基础操作(2)数据选择 IT教程 第1张

人生苦短,我用 Python

前文传送门:

小白学 Python 数据剖析(1):数据剖析基本

小白学 Python 数据剖析(2):Pandas (一)概述

小白学 Python 数据剖析(3):Pandas (二)数据结构 Series

小白学 Python 数据剖析(4):Pandas (三)数据结构 DataFrame

小白学 Python 数据剖析(5):Pandas (四)基本操纵(1)检察数据

弁言

上一篇文章我们引见如安在 Pandas 一些基本的检察数据的操纵,然则官方更引荐我们运用 .at.iat.loc.iloc 这几个经由 Pandas 优化过的数据接见要领来接见数据。

起首我们照样先建立一个 DataFrame 用作演示,小编偷懒,接着把上一篇的 DataFrame 拷贝过来了,以下:

import numpy as np
import pandas as pd

dates = pd.date_range('20200101', periods=6)
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
print(df)

DataFrame 是由许多列构成的,实在能够看作是由多个 Series 构成,我们能够零丁猎取一列直接取得一个 Series ,以下:

# 猎取单列,取得 Series
print(df['A'])

# 输出效果
2020-01-01   -0.065477
2020-01-02   -1.089716
2020-01-03    0.049215
2020-01-04   -0.017615
2020-01-05   -0.910402
2020-01-06   -0.008887
Freq: D, Name: A, dtype: float64

接下来我们能够经由过程 [] 对 DataFrame 举行切片操纵,示例以下:

# 行切片
print(df[0:3])
print(df['20200101' : '20200103'])

# 输出效果
                   A         B         C         D
2020-01-01 -0.065477  1.603827  1.152969  0.742842
2020-01-02 -1.089716 -0.540936  0.456917  0.295272
2020-01-03  0.049215 -1.182454 -0.294177 -0.698877
                   A         B         C         D
2020-01-01 -0.065477  1.603827  1.152969  0.742842
2020-01-02 -1.089716 -0.540936  0.456917  0.295272
2020-01-03  0.049215 -1.182454 -0.294177 -0.698877

能够看到,我们经由过程整数或者是 columns 将 DataFrame 举行了行切片。

loc

我们能够经由过程运用 loc 举行 column 名和 index 名定位。

比方我们经由过程 column 提掏出一行数据,以下:

# 用标签提取一行数据
print(df.loc[dates[0]])

# 输出效果
A   -0.065477
B    1.603827
C    1.152969
D    0.742842
Name: 2020-01-01 00:00:00, dtype: float64

注重,这里的 dates 是我们在最前面生成的一个数组,这里的写法一样能够替换成 df.loc['20200101']

一样我们能够经由过程切片的体式格局猎取指定某几行的数据,以下:

# 用标签提取多列数据
print(df.loc[:, ['A', 'B']])

# 输出效果
                   A         B
2020-01-01 -0.065477  1.603827
2020-01-02 -1.089716 -0.540936
2020-01-03  0.049215 -1.182454
2020-01-04 -0.017615 -0.777637
2020-01-05 -0.910402 -0.173959
2020-01-06 -0.008887  0.525035

# 用标签举行切片操纵,同时制订行与列的完毕点
print(df.loc['20200101':'20200103', ['A', 'B']])

# 输出效果
                   A         B
2020-01-01 -0.065477  1.603827
2020-01-02 -1.089716 -0.540936
2020-01-03  0.049215 -1.182454

# 返回一行中的两列
print(df.loc['20200101', ['A', 'B']])

# 输出效果
A   -0.065477
B    1.603827
Name: 2020-01-01 00:00:00, dtype: float64

那末我假如想取得一个指定位置的数据怎么办呢?当我们把 DataFrame 想像成为一个坐标系的时刻,当然是指定横纵坐标能够肯定一个唯一的点啊,以下:

# 猎取某个标量值
print(df.loc[dates[0], 'A'])

# 输出效果
-0.06547653622759132

iloc

iloc 和上面的 loc 很像, loc 主如果经由过程行举行索引定位,而 iloc 是经由过程 index 也就是列举行索引定位,所以参数是整型, iloc 的英文全称为 index locate 。

先看一个简朴的示例,我们先用整数挑选出个中的一列:

# 用整数位置挑选
print(df.iloc[3])

# 输出效果
A   -0.017615
B   -0.777637
C    0.824364
D    0.210244
Name: 2020-01-04 00:00:00, dtype: float64

这里我们还能够加上切片举行挑选:

# 运用整数按行和列举行切片操纵
print(df.iloc[3:5, 0:2])

# 输出效果
                   A         B
2020-01-04 -0.017615 -0.777637
2020-01-05 -0.910402 -0.173959

# 用整数列表按位置切片
print(df.iloc[[1, 2, 4], [0, 2]])

# 输出效果
                   A         C
2020-01-02 -1.089716  0.456917
2020-01-03  0.049215 -0.294177
2020-01-05 -0.910402 -1.140222

# 整行切片
print(df.iloc[1:3, :])

# 输出效果
                   A         B         C         D
2020-01-02 -1.089716 -0.540936  0.456917  0.295272
2020-01-03  0.049215 -1.182454 -0.294177 -0.698877

# 整列切片
print(df.iloc[:, 1:3])

# 输出效果
                   B         C
2020-01-01  1.603827  1.152969
2020-01-02 -0.540936  0.456917
2020-01-03 -1.182454 -0.294177
2020-01-04 -0.777637  0.824364
2020-01-05 -0.173959 -1.140222
2020-01-06  0.525035 -1.076101

一样,我们经由过程 iloc 也能够直接挑选一个标量值:

# 猎取某个标量值 同上
print(df.iloc[1, 1])

# 效果以下
-0.540936460611594

at 和 iat

at 和 iat 都是用来接见单个元素的,而且他们的接见速率要快于上面的 loc 和 iloc 。

at 运用要领与 loc 相似,示例以下:

print(df.at[dates[0], 'A'])

# 输出效果
-0.06547653622759132

iat 关于 iloc 的关联就像 at 关于 loc 的关联,示例以下:

print(df.iat[1, 1])

# 输出效果
-0.540936460611594

其他

我们还能够运用一些推断前提来挑选数据,如用单列的值挑选数据,示例以下:

print(df[df.A > 0])

# 输出效果
                   A         B         C         D
2020-01-03  0.049215 -1.182454 -0.294177 -0.698877

上面这个示例是输出的一切 A 列大于 0 的数据。

另有直接运用全部 df 做推断的,示例以下:

print(df[df < 0])

# 输出效果
                   A         B         C         D
2020-01-01 -0.065477       NaN       NaN       NaN
2020-01-02 -1.089716 -0.540936       NaN       NaN
2020-01-03       NaN -1.182454 -0.294177 -0.698877
2020-01-04 -0.017615 -0.777637       NaN       NaN
2020-01-05 -0.910402 -0.173959 -1.140222 -0.662615
2020-01-06 -0.008887       NaN -1.076101 -0.862407

示例代码

老例子,一切的示例代码都邑上传至代码治理堆栈 Github 和 Gitee 上,轻易人人取用。

示例代码-Github

示例代码-Gitee

 

新年新气象,接个私活赚点生活费?说说这里的弯弯绕

参与评论