详解pandas DataFrame的查询方法(loc,iloc,at,iat,ix的用法和区别)

  • Post category:Python

详解pandas DataFrame的查询方法

Pandas是一个很强大的数据分析库,提供了灵活、易用、高效的数据结构和数据处理工具。Pandas DataFrame是Pandas库中最常用的数据结构之一,包含有标签行和列的二维表格,类似于Excel表格的形式。在对Pandas DataFrame进行数据筛选时,我们常使用众多的查询方法,其中包括.loc、.iloc、.at、.iat和.ix,这些方法都有着各自的特点和用法。下面我们将进行一一解析并进行比较。

.loc方法

.loc方法用于基于标签来获取行和列的数据,是比较灵活的一种查询方式。通过.loc方法可以进行高级索引和切片操作。

在使用.loc时,需要注意:

  1. loc方法是基于行和列的标签来查询数据的。因此,对于整数类型的标签,需要将它们转换为字符串类型。
  2. 在使用切片时,要注意右端点是被包含在内的,这一点与Python切片有所不同。

示例1:

import pandas as pd

dict = {'name': ['jack', 'rose', 'harry'], 'age': [18, 20, 19], 'gender': ['male', 'female', 'male']}
df = pd.DataFrame(dict)
df.set_index('name', inplace = True)

print(df.loc[['jack','rose'], :])

输出结果为:

       age  gender
name             
jack    18    male
rose    20  female

示例2:

import pandas as pd

dict = {'name': ['jack', 'rose', 'harry'], 'age': [18, 20, 19], 'gender': ['male', 'female', 'male']}
df = pd.DataFrame(dict)
df.set_index('name', inplace = True)

print(df.loc[['jack','rose'], ['age', 'gender']])

输出结果为:

       age  gender
name             
jack    18    male
rose    20  female

.iloc方法

.iloc方法用于基于整数位置来获取行和列的数据,相当于对行和列进行编号。与.loc方法不同的是,.iloc方法是使用整数索引来查询和筛选数据的。

示例1:

import pandas as pd

dict = {'name': ['jack', 'rose', 'harry'], 'age': [18, 20, 19], 'gender': ['male', 'female', 'male']}
df = pd.DataFrame(dict)
df.set_index('name', inplace = True)

print(df.iloc[0:2, :])

输出结果为:

      age  gender
name            
jack   18    male
rose   20  female

示例2:

import pandas as pd

dict = {'name': ['jack', 'rose', 'harry'], 'age': [18, 20, 19], 'gender': ['male', 'female', 'male']}
df = pd.DataFrame(dict)
df.set_index('name', inplace = True)

print(df.iloc[0:2, 1:3])

输出结果为:

       age  gender
name             
jack    18    male
rose    20  female

.at方法

.at方法用于获取单个特定位置的值,仅适用于获取单个元素,无法进行切片和高级索引。

在使用.at时,需要注意:

  1. at方法是基于行和列的标签来查询数据的。因此,对于整数类型的标签,需要将它们转换为字符串类型。

示例:

import pandas as pd

dict = {'name': ['jack', 'rose', 'harry'], 'age': [18, 20, 19], 'gender': ['male', 'female', 'male']}
df = pd.DataFrame(dict)
df.set_index('name', inplace = True)

print(df.at['jack', 'gender'])

输出结果为:

'male'

.iat方法

.iat方法用于获取单个特定位置的值,仅适用于获取单个元素,无法进行切片和高级索引。

示例:

import pandas as pd

dict = {'name': ['jack', 'rose', 'harry'], 'age': [18, 20, 19], 'gender': ['male', 'female', 'male']}
df = pd.DataFrame(dict)
df.set_index('name', inplace = True)

print(df.iat[0, 1])

输出结果为:

18

.ix方法

.ix方法是.loc方法和.iloc方法的混合使用,是一种通用、灵活的查询方式,在Pandas 1.0版本之后已经被弃用,推荐使用.loc和.iloc方法代替。

总结

.loc和.iloc方法可以进行行和列的高级索引和切片操作,适用于大部分数据查询的情况下;
.at和.iat方法则适用于只需要查询单个元素的情况下。

以上就是Pandas DataFrame的几种查询方式,它们各自有着不同的用法和特点,需要根据具体情况来选择。