- Python Pandas 教程
- Python Pandas - 首页
- Python Pandas - 简介
- Python Pandas - 环境配置
- Python Pandas - 基础
- Python Pandas - 数据结构介绍
- Python Pandas - 索引对象
- Python Pandas - Panel(面板)
- Python Pandas - 基本功能
- Python Pandas - 数据索引和选择
- Python Pandas - Series(序列)
- Python Pandas - Series(序列)
- Python Pandas - 切片 Series 对象
- Python Pandas - Series 对象的属性
- Python Pandas - Series 对象的算术运算
- Python Pandas - 将 Series 转换为其他对象
- Python Pandas - DataFrame(数据框)
- Python Pandas - DataFrame(数据框)
- Python Pandas - 访问 DataFrame
- Python Pandas - 切片 DataFrame 对象
- Python Pandas - 修改 DataFrame
- Python Pandas - 从 DataFrame 中删除行
- Python Pandas - DataFrame 的算术运算
- Python Pandas - I/O 工具
- Python Pandas - I/O 工具
- Python Pandas - 使用 CSV 格式
- Python Pandas - 读取和写入 JSON 文件
- Python Pandas - 从 Excel 文件读取数据
- Python Pandas - 将数据写入 Excel 文件
- Python Pandas - 使用 HTML 数据
- Python Pandas - 剪贴板
- Python Pandas - 使用 HDF5 格式
- Python Pandas - 与 SQL 的比较
- Python Pandas - 数据处理
- Python Pandas - 排序
- Python Pandas - 重新索引
- Python Pandas - 迭代
- Python Pandas - 级联
- Python Pandas - 统计函数
- Python Pandas - 描述性统计
- Python Pandas - 使用文本数据
- Python Pandas - 函数应用
- Python Pandas - 选项和自定义
- Python Pandas - 窗口函数
- Python Pandas - 聚合
- Python Pandas - 合并/连接
- Python Pandas - 多层索引
- Python Pandas - 多层索引基础
- Python Pandas - 使用多层索引进行索引
- Python Pandas - 使用多层索引进行高级重新索引
- Python Pandas - 重命名多层索引标签
- Python Pandas - 对多层索引排序
- Python Pandas - 二元运算
- Python Pandas - 二元比较运算
- Python Pandas - 布尔索引
- Python Pandas - 布尔掩码
- Python Pandas - 数据重塑和透视
- Python Pandas - 透视
- Python Pandas - 堆叠和取消堆叠
- Python Pandas - 熔化
- Python Pandas - 计算虚拟变量
- Python Pandas - 分类数据
- Python Pandas - 分类数据
- Python Pandas - 分类数据的排序和排序
- Python Pandas - 分类数据的比较
- Python Pandas - 处理缺失数据
- Python Pandas - 缺失数据
- Python Pandas - 填充缺失数据
- Python Pandas - 缺失值的插值
- Python Pandas - 删除缺失数据
- Python Pandas - 使用缺失数据进行计算
- Python Pandas - 处理重复项
- Python Pandas - 重复数据
- Python Pandas - 计数和检索唯一元素
- Python Pandas - 重复标签
- Python Pandas - 分组和聚合
- Python Pandas - GroupBy
- Python Pandas - 时间序列数据
- Python Pandas - 日期功能
- Python Pandas - Timedelta(时间差)
- Python Pandas - 稀疏数据结构
- Python Pandas - 稀疏数据
- Python Pandas - 数据可视化
- Python Pandas - 数据可视化
- Python Pandas - 其他概念
- Python Pandas - 警告和注意事项
- Python Pandas - 有用资源
- Python Pandas - 快速指南
- Python Pandas - 有用资源
- Python Pandas - 讨论
Python Pandas - 数据索引和选择
在 pandas 中,数据索引和选择对于高效处理 Series 和 DataFrame 对象中的数据至关重要。这些操作可以帮助您轻松地切片、切块和访问数据的子集。
这些操作涉及检索数据结构(无论是 Series 还是 DataFrame)的特定部分。此过程对于数据分析至关重要,因为它允许您专注于相关数据、应用转换和执行计算。
pandas 中的索引至关重要,因为它提供了有助于分析、可视化和交互式显示的元数据。它自动对齐数据以简化操作,并简化获取和设置数据子集的过程。
本教程将探讨使用 Pandas 切片、切块和操作数据的各种方法,帮助您了解如何访问和修改数据的子集。
Pandas 中的索引类型
与 Python 和 NumPy 的索引([ ])和属性(.)运算符类似,Pandas 提供了直接访问其数据结构中数据的方法。但是,由于被访问的数据类型可能无法预测,因此仅依赖这些标准运算符可能会导致优化方面的挑战。
Pandas 提供了几种用于索引和选择数据的方法,例如:
使用 .loc 进行基于标签的索引
使用 .iloc 进行基于整数位置的索引
使用方括号 [] 进行索引
使用 .loc 进行基于标签的索引
.loc 索引器用于基于标签的索引,这意味着您可以按其标签访问行和列。它还支持布尔数组进行条件选择。
.loc() 有多种访问方法,例如:
单个标量标签:选择单行或单列,例如:df.loc['a']。
标签列表:选择多行或多列,例如:df.loc[['a', 'b']]。
标签切片:使用标签进行切片,例如:df.loc['a':'f'](起始和结束都包含)。
布尔数组:基于条件过滤数据,例如:df.loc[boolean_array]。
loc 使用两个单值/列表/范围运算符,用 ',' 分隔。第一个表示行,第二个表示列。
示例 1
这是一个基本示例,它使用 loc 索引器为特定列选择所有行。
#import the pandas library and aliasing as pd
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4),
index = ['a','b','c','d','e','f','g','h'], columns = ['A', 'B', 'C', 'D'])
print("Original DataFrame:\n", df)
#select all rows for a specific column
print('\nResult:\n',df.loc[:,'A'])
其输出如下:
Original DataFrame:
A B C D
a 0.962766 -0.195444 1.729083 -0.701897
b -0.552681 0.797465 -1.635212 -0.624931
c 0.581866 -0.404623 -2.124927 -0.190193
d -0.284274 0.019995 -0.589465 0.914940
e 0.697209 -0.629572 -0.347832 0.272185
f -0.181442 -0.000983 2.889981 0.104957
g 1.195847 -1.358104 0.110449 -0.341744
h -0.121682 0.744557 0.083820 0.355442
Result:
a 0.962766
b -0.552681
c 0.581866
d -0.284274
e 0.697209
f -0.181442
g 1.195847
h -0.121682
Name: A, dtype: float64
注意:生成的输出在每次执行时都会有所不同,因为 DataFrame 是使用 NumPy 的随机数生成器创建的。
示例 2
此示例选择多列的所有行。
# import the pandas library and aliasing as pd import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(8, 4), index = ['a','b','c','d','e','f','g','h'], columns = ['A', 'B', 'C', 'D']) # Select all rows for multiple columns, say list[] print(df.loc[:,['A','C']])
其输出如下:
A C a 0.391548 0.745623 b -0.070649 1.620406 c -0.317212 1.448365 d -2.162406 -0.873557 e 2.202797 0.528067 f 0.613709 0.286414 g 1.050559 0.216526 h 1.122680 -1.621420
示例 3
此示例选择特定列的特定行。
# import the pandas library and aliasing as pd import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(8, 4), index = ['a','b','c','d','e','f','g','h'], columns = ['A', 'B', 'C', 'D']) # Select few rows for multiple columns, say list[] print(df.loc[['a','b','f','h'],['A','C']])
其输出如下:
A C a 0.391548 0.745623 b -0.070649 1.620406 f 0.613709 0.286414 h 1.122680 -1.621420
示例 4
以下示例使用 loc 索引器选择所有列的一系列行。
# import the pandas library and aliasing as pd import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(8, 4), index = ['a','b','c','d','e','f','g','h'], columns = ['A', 'B', 'C', 'D']) # Select range of rows for all columns print(df.loc['c':'e'])
其输出如下:
A B C D c 0.044589 1.966278 0.894157 1.798397 d 0.451744 0.233724 -0.412644 -2.185069 e -0.865967 -1.090676 -0.931936 0.214358
使用 .iloc 进行基于整数位置的索引
.iloc 索引器用于基于整数的索引,允许您按其数值位置选择行和列。此方法类似于标准 Python 和 NumPy 索引(即基于 0 的索引)。
单个整数:按其位置选择数据,例如:df.iloc[0]。
整数列表:按其位置选择多行或多列,例如:df.iloc[[0, 1, 2]]。
整数切片:使用整数进行切片,例如:df.iloc[1:3]。
布尔数组:与 .loc 类似,但用于位置。
示例 1
这是一个基本示例,它使用 iloc 索引器为所有列选择 4 行。
# import the pandas library and aliasing as pd
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])
print("Original DataFrame:\n", df)
# select all rows for a specific column
print('\nResult:\n',df.iloc[:4])
其输出如下:
Original DataFrame:
A B C D
0 -1.152267 2.206954 -0.603874 1.275639
1 -0.799114 -0.214075 0.283186 0.030256
2 -1.823776 1.109537 1.512704 0.831070
3 -0.788280 0.961695 -0.127322 -0.597121
4 0.764930 -1.310503 0.108259 -0.600038
5 -1.683649 -0.602324 -1.175043 -0.343795
6 0.323984 -2.314158 0.098935 0.065528
7 0.109998 -0.259021 -0.429467 0.224148
Result:
A B C D
0 -1.152267 2.206954 -0.603874 1.275639
1 -0.799114 -0.214075 0.283186 0.030256
2 -1.823776 1.109537 1.512704 0.831070
3 -0.788280 0.961695 -0.127322 -0.597121
示例 2
以下示例使用整数切片选择特定数据。
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D']) # Integer slicing print(df.iloc[:4]) print(df.iloc[1:5, 2:4])
其输出如下:
A B C D
0 0.699435 0.256239 -1.270702 -0.645195
1 -0.685354 0.890791 -0.813012 0.631615
2 -0.783192 -0.531378 0.025070 0.230806
3 0.539042 -1.284314 0.826977 -0.026251
C D
1 -0.813012 0.631615
2 0.025070 0.230806
3 0.826977 -0.026251
4 1.423332 1.130568
示例 3
此示例使用值列表通过切片选择数据。
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D']) # Slicing through list of values print(df.iloc[[1, 3, 5], [1, 3]])
其输出如下:
B D 1 0.890791 0.631615 3 -1.284314 -0.026251 5 -0.512888 -0.518930
使用方括号“[]”进行直接索引
使用 [] 进行直接索引是一种快速而直观的数据访问方式,类似于使用 Python 字典和 NumPy 数组进行索引。它通常用于基本操作:
单列:按名称访问单列。
多列:通过传递列名列表来选择多列。
行切片:使用基于整数的索引切片行。
示例 1
此示例演示如何使用方括号进行直接索引来访问单列。
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D']) # Accessing a Single Column print(df['A'])
其输出如下:
0 -0.850937 1 -1.588211 2 -1.125260 3 2.608681 4 -0.156749 5 0.154958 6 0.396192 7 -0.397918 Name: A, dtype: float64
示例 2
此示例使用直接索引选择多列。
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D']) # Accessing Multiple Columns print(df[['A', 'B']])
其输出如下:
A B 0 0.167211 -0.080335 1 -0.104173 1.352168 2 -0.979755 -0.869028 3 0.168335 -1.362229 4 -1.372569 0.360735 5 0.428583 -0.203561 6 -0.119982 1.228681 7 -1.645357 0.331438