loc和iloc的详解及使用

在Pandas中,lociloc是用于DataFrame和Series数据选择的两种核心方法,​​本质区别在于索引方式:loc基于标签(label),而iloc基于整数位置(integer position)​​。以下是详细对比及用法说明:


📌 ​​核心区别总结​

​特性​lociloc
​索引类型​标签(字符串、日期等)整数位置(从0开始)
​切片行为​闭区间(包含结束标签)开区间(不包含结束位置)
​支持索引​标签、布尔数组、条件表达式整数、整数列表/切片、布尔数组(需基于位置)
​适用场景​按行/列名称选择、条件筛选按物理位置选择(如第n行/列)

🔍 ​​详细功能与示例​

​1. loc:基于标签的索引​
  • ​选择单行/单列​​:
    df.loc['a']          # 选择标签为'a'的行
    df.loc[:, 'Age']     # 选择列名为'Age'的所有行
  • ​多行多列选择​​:
    df.loc[['a', 'c'], ['Name', 'City']]  # 选择'a'和'c'行,'Name'和'City'列
  • ​切片操作​​(包含结束点):
    df.loc['a':'c', 'Name':'City']  # 从'a'到'c'行,'Name'到'City'列(含'c'和'City')
  • ​布尔索引​​(条件筛选):
    df.loc[df['Age'] > 30]                 # 筛选Age>30的行
    df.loc[df['City'].isin(['New York'])]  # 筛选City为纽约的行
​2. iloc:基于位置的索引​
  • ​选择单行/单列​​:
    df.iloc[0]      # 第1行(位置0)
    df.iloc[:, 1]   # 第2列(位置1)
  • ​多行多列选择​​:
    df.iloc[[0, 2], [0, 2]]  # 第1行和第3行,第1列和第3列
  • ​切片操作​​(左闭右开):
    df.iloc[0:2, 1:3]  # 第1-2行(不含第2行),第2-3列(不含第3列)
  • ​布尔索引​​(需结合位置):
    mask = (df['Age'] > 30).values  # 生成布尔数组并转换为位置索引
    df.iloc[mask]                   # 选择满足条件的行

⚠️ ​​关键注意事项​

  1. ​切片区间差异​​:
    • loc['a':'c'] 包含标签'a''b''c'。
    • iloc[0:2] 仅包含位置0和1(不包含2)。
  2. ​索引灵活性​​:
    • loc可处理非整数标签(如字符串索引)。
    • iloc仅支持整数位置,与DataFrame的索引标签无关。
  3. ​布尔索引区别​​:
    • loc可直接用列条件(如df['A'] > 0)。
    • iloc需将布尔数组转换为位置索引(如.values)。

💡 ​​何时选择哪种方法?​

  • ​用loc当​​:
    ✅ 需按行/列名称(如日期、ID)访问数据;
    ✅ 需包含结束点的切片(如时间范围);
    ✅ 需直接使用列条件筛选数据。
  • ​用iloc当​​:
    ✅ 需按物理位置选择(如前5行、第2列);
    ✅ 数据索引无明确业务含义(如纯数字索引);
    ✅ 需与NumPy类似的整数位置操作兼容。

🌰 ​​场景示例​

import pandas as pd
data = {'Name': ['Alice', 'Bob', 'Charlie'], 'Age': [25, 30, 35], 'City': ['NY', 'LA', 'Chicago']}
df = pd.DataFrame(data, index=['a', 'b', 'c'])

# loc示例:选择'a'到'b'行,'Name'列(包含'b')
df.loc['a':'b', 'Name']  # 输出:a→Alice, b→Bob

# iloc示例:选择前2行,第1列(位置0)
df.iloc[0:2, 0]         # 输出:a→Alice, b→Bob(不包含第2行)

💡 ​​提示​​:若索引重复,loc会返回所有匹配标签的行,此时可用.reset_index()重置索引。

掌握两者差异,可更高效精准地操作Pandas数据结构!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值