Python pandas.DataFrame.iloc函数方法的使用

DataFrame.iloc 函数是 Pandas 提供的一种基于整数位置进行索引的方法。可以通过行和列的整数位置来选择和操作 DataFrame 中的数据。本文主要介绍一下Pandas中pandas.DataFrame.iloc方法的使用。

DataFrame.iloc

纯粹基于整数位置的索引,用于按位置选择。

.iloc[] 主要是基于整数位置(从轴的0到长度-1),但也可以与布尔数组一起使用。

允许的输入:

  • 整数, 例如, 5
  • 整数的列表或数组, 例如, [4, 3, 0]
  • 带有整数的切片对象, 例如, 1:7
  • 布尔数组
  • 具有一个参数(调用Series,DataFrame或Panel)的可调用函数,它返回索引的有效输出(上述之一)。 当您没有对调用对象的引用但希望将选择基于某个值时,这在方法链中很有用。

.iloc 如果请求的索引器超出范围,将引发IndexError,除了允许越界索引的切片索引器(这符合python / numpy切片语义)。

请参阅ref:按位置选择<indexing.integer>

例子,

>>> mydict = [{'a': 1, 'b': 2, 'c': 3, 'd': 4},
...           {'a': 100, 'b': 200, 'c': 300, 'd': 400},
...           {'a': 1000, 'b': 2000, 'c': 3000, 'd': 4000 }]
>>> df = pd.DataFrame(mydict)
>>> df
      a     b     c     d
0     1     2     3     4
1   100   200   300   400
2  1000  2000  3000  4000

1)仅对行进行索引

带标量整数

>>> type(df.iloc[0])
<class 'pandas.core.series.Series'>
>>> df.iloc[0]
a    1
b    2
c    3
d    4
Name: 0, dtype: int64

带有整数列表

>>> df.iloc[[0]]
   a  b  c  d
0  1  2  3  4
>>> type(df.iloc[[0]])
<class 'pandas.core.frame.DataFrame'>
>>> df.iloc[[0, 1]]
     a    b    c    d
0    1    2    3    4
1  100  200  300  400

使用切片对象

>>> df.iloc[:3]
      a     b     c     d
0     1     2     3     4
1   100   200   300   400
2  1000  2000  3000  4000 

布尔掩码的长度与索引的长度相同 

>>> df.iloc[[True, False, True]]
      a     b     c     d
0     1     2     3     4
2  1000  2000  3000  4000

选择索引为偶数的行

>>> df.iloc[lambda x: x.index % 2 == 0]
      a     b     c     d
0     1     2     3     4
2  1000  2000  3000  4000

2)索引两个轴

可以混合索引和列的索引器类型。 使用:选择整个轴

用标量整数

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

带有整数列表

>>> df.iloc[[0, 2], [1, 3]]
      b     d
0     2     4
2  2000  4000

使用切片对象

>>> df.iloc[1:3, 0:3]
      a     b     c
1   100   200   300
2  1000  2000  3000

使用长度与列匹配的布尔数组

>>> df.iloc[:, [True, False, True, False]]
      a     c
0     1     3
1   100   300
2  1000  3000

Series的可调用函数或DataFrame

>>> df.iloc[:, lambda df: [0, 2]]
      a     c
0     1     3
1   100   300
2  1000  3000

3)使用示例

import pandas as pd

# 创建 DataFrame
mydict = [{'a': 1, 'b': 2, 'c': 3, 'd': 4},
          {'a': 100, 'b': 200, 'c': 300, 'd': 400},
          {'a': 1000, 'b': 2000, 'c': 3000, 'd': 4000}]

df = pd.DataFrame(mydict)
print("Initial DataFrame:")
print(df)

# 1) 仅对行进行索引
# 带标量整数
print("\nIndexing with scalar integer:")
print(type(df.iloc[0]))  # <class 'pandas.core.series.Series'>
print(df.iloc[0])

# 带有整数列表
print("\nIndexing with integer list:")
print(df.iloc[[0]])
print(type(df.iloc[[0]]))  # <class 'pandas.core.frame.DataFrame'>
print(df.iloc[[0, 1]])

# 使用切片对象
print("\nIndexing with slice object:")
print(df.iloc[:3])

# 布尔掩码的长度与索引的长度相同
print("\nIndexing with boolean mask:")
print(df.iloc[[True, False, True]])

# 选择索引为偶数的行
print("\nIndexing rows where index is even:")
print(df.iloc[lambda x: x.index % 2 == 0])

# 索引两个轴
# 用标量整数
print("\nIndexing with scalar integer for both axes:")
print(df.iloc[0, 1])

# 带有整数列表
print("\nIndexing with integer list for both axes:")
print(df.iloc[[0, 2], [1, 3]])

# 使用切片对象
print("\nIndexing with slice object for both axes:")
print(df.iloc[1:3, 0:3])

# 使用长度与列匹配的布尔数组
print("\nIndexing with boolean array for columns:")
print(df.iloc[:, [True, False, True, False]])

# 使用 Series 的可调用函数或 DataFrame
print("\nIndexing with callable for columns:")
print(df.iloc[:, lambda df: [0, 2]])

推荐阅读
cjavapy编程之路首页