用Pandas索引和选择数据

  • Post category:Python

当我们在Pandas中处理数据时,了解如何索引和选择数据是非常重要的。这篇攻略将会提供详细的指导和实例,教你如何使用Pandas进行数据选择和索引。以下将要涉及的内容:

  1. 基本索引 [ ]
  2. 使用 .loc 进行标签索引
  3. 使用 .iloc 进行整数位置索引
  4. 使用 .ix 进行混合选择
  5. 使用布尔索引
  6. 使用头尾行 .head() 和 .tail()
  7. 使用 .drop() 删除行或列

在接下来的部分中,我们会使用一个名为 df 的数据框来进行示例演示,该数据框具有以下结构:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
    'Age': [25, 30, 35, 20, 27],
    'Country': ['US', 'CA', 'UK', 'DE', 'US']
})

1. 基本索引 [ ]

基本索引是最基本的数据选择方式,使用方括号括起来的列名称或切片。例如,要选择 df 的前三行,可以使用以下语句:

df[:3]

输出结果为:

     Name  Age Country
0   Alice   25      US
1     Bob   30      CA
2  Charlie   35      UK

2. 使用 .loc 进行标签索引

.loc 用于基于标签的索引,可以使用行标签或者列标签进行数据选择。以下是使用 .loc 方法来获取以下所有行:

df.loc[:, :]

输出结果为:

      Name  Age Country
0    Alice   25      US
1      Bob   30      CA
2   Charlie   35      UK
3     David   20      DE
4       Eva   27      US

.loc方法同样支持选择单独的列或行,以下是使用 .loc 方法来选择前三行数据:

df.loc[:2, :]

输出结果为:

     Name  Age Country
0   Alice   25      US
1     Bob   30      CA
2  Charlie   35      UK

3. 使用 .iloc 进行整数位置索引

.iloc 用于基于整数位置的索引,即使用行号或者列号来进行数据选择。以下是使用 .iloc 方法对前两列进行选择:

df.iloc[:, :2]

输出结果为:

      Name  Age
0    Alice   25
1      Bob   30
2   Charlie   35
3     David   20
4       Eva   27

使用 .iloc 方法还可以选择某些行或者列,例如选择第二行和第三列:

df.iloc[[1], [2]]

输出结果为:

  Country
1      CA

4. 使用 .ix 进行混合选择

.ix 方法可以实现混合选择,同时支持标签和整数索引。例如,要选择前三行和第二列,则可以使用以下语句:

df.ix[:2, 1]

输出结果为:

0    25
1    30
2    35
Name: Age, dtype: int64

注意: 该方法在 Pandas 版本 0.20.0 后已经被弃用,并由.loc 和.iloc方法分别代替,但若版本较早可以照常使用该方法。

5. 使用布尔索引

布尔索引可以根据满足条件的数据进行选择,通常使用比较运算符来指定其过滤条件。以下是使用布尔索引选择所有 Age 大于25岁的数据:

df[df['Age'] > 25]

输出结果为:

      Name  Age Country
1      Bob   30      CA
2   Charlie   35      UK
4       Eva   27      US

6. 使用头尾行 .head() 和 .tail()

.head() 方法和 .tail() 方法可以选择前N行和后N行信息。例如,以下是使用 .head() 方法来选择前2行数据:

df.head(2)

输出结果为:

    Name  Age Country
0  Alice   25      US
1    Bob   30      CA

7. 使用 .drop() 删除行或列

使用.drop()可以轻松地删除某些行或列,例如删除第一列 Name

df = df.drop(['Name'], axis=1)

请注意,axis=1 表示我们将要删除列,而不是行。如果要删除行,请将 axis 的值更改为0。