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
广告
© . All rights reserved.