Pandas索引器loc和iloc比较及代码示例

作者:

文章目录
  • 特性 loc (标签索引) iloc (位置索引) 索引类型 行/列标签(字符串、日期等) 行/列整数位置(从0开始) 切片行为 包含结束标签(闭区间) 不包含结束位置(左闭右开) 布尔索引 直接支持条件表达式(更直观) 需先生成布尔数组再操作 索引灵活性 支持非整数标签(如字符串索引) 仅支持整数位置
  • 场景 推荐方法 原因 已知行/列标签(如列名为"Age") loc 直接标签访问,语义清晰 按行号/列号操作(如前三行) iloc 位置计算高效 时间序列数据(日期索引) loc 避免位置漂移(如df.loc["2023":"2025"]) 大数据集遍历 iloc 整数位置操作速度更快 最佳实践:优先用 loc 保证可读性,性能敏感时切 iloc。始终通过 print(df.head()) 确认数据结构,避免索引混淆。 到此这篇关于Pandas索引器 loc 和 iloc 比较及代码示例的文章就介绍到这了,更多相关Pandas索引器 loc 和 iloc内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: Python Pandas数据分析之iloc和loc的用法详解 详谈Pandas中iloc和loc以及ix的区别 聊聊Python pandas 中loc函数的使用,及跟iloc的区别说明 python选取特定列 pandas iloc,loc,icol的使用详解(列切片及行切片) 一文秒懂pandas中iloc()函数 利用Pandas读取某列某行数据之loc和iloc用法总结 Pandas中的loc与iloc区别与用法小结 对pandas中iloc,loc取数据差别及按条件取值的方法详解 Python Pandas中loc和iloc函数的基本用法示例 python中pandas库的iloc函数用法解析
  • 目录
    • 一、核心差异解析
    • 二、关键场景代码示例
      • 1. 基础索引对比
      • 2. 切片行为差异
      • 3. 布尔索引使用
      • 4. 混合行列选择
    • 三、高级技巧与性能
      • 1. 函数式索引
      • 2. 性能优化建议
    • 四、特殊场景处理
      • 1. 整数索引陷阱
      • 2. 负索引支持
    • 五、总结:选择策略

      Pandas 索引器 loc 和 iloc 比较及代码示例

      以下是针对 Pandas 中 lociloc 的深度对比分析及代码示例,结合核心差异、使用场景和底层机制展开说明:

      特性 loc (标签索引) iloc (位置索引)
      索引类型 行/列标签(字符串、日期等) 行/列整数位置(从0开始)
      切片行为 包含结束标签(闭区间) 不包含结束位置(左闭右开)
      布尔索引 直接支持条件表达式(更直观) 需先生成布尔数组再操作
      索引灵活性 支持非整数标签(如字符串索引) 仅支持整数位置

      import pandas as pd
      
      # 创建带自定义索引的DataFrame
      data = {"Age": [25, 32, 28, 40], "City": ["北京", "上海", "广州", "深圳"]}
      df = pd.DataFrame(data, index=["Alice", "Bob", "Charlie", "David"])
      
      # loc按标签选择 → 获取Bob行所有列
      print(df.loc["Bob"])  # 输出: Age 32, City 上海
      
      # iloc按位置选择 → 获取第1行所有列(索引0为Alice)
      print(df.iloc[1])     # 输出: 同上(Bob行)
      

      Age     32
      City    上海
      Name: Bob, dtype: object
      Age     32
      City    上海
      Name: Bob, dtype: object

      # loc切片包含结束标签 → 选择Alice到Charlie行
      print(df.loc["Alice":"Charlie"])  # 输出3行数据
      
      # iloc切片不包含结束位置 → 选择0至1行(不含索引2)
      print(df.iloc[0:2])               # 仅输出Alice和Bob行
      

               Age City
      Alice     25   北京
      Bob       32   上海
      Charlie   28   广州
             Age City
      Alice   25   北京
      Bob     32   上海

      # loc直接条件筛选 → 年龄>30的行
      print(df.loc[df["Age"] > 30])     # 输出Bob和David行
      
      # iloc需分两步 → 先生成掩码再选择
      mask = df["Age"] > 30
      print(df.iloc[mask.values])        # 需用.values转为数组
      

             Age City
      Bob     32   上海
      David   40   深圳
             Age City
      Bob     32   上海
      David   40   深圳

      # loc选择多列 → 所有行 + "City"列
      print(df.loc[:, "City"])           # 输出城市列所有数据
      
      # iloc选择连续列 → 所有行 + 第1列(列索引从0开始)
      print(df.iloc[:, 1])               # 同上(City列位置为1)
      

      Alice      北京
      Bob        上海
      Charlie    广州
      David      深圳
      Name: City, dtype: object
      Alice      北京
      Bob        上海
      Charlie    广州
      David      深圳
      Name: City, dtype: object

      # loc + lambda → 筛选Age为偶数的行
      print(df.loc[lambda x: x["Age"] % 2 == 0])  # 输出Bob(32), David(40)
      
      # iloc + lambda → 筛选索引位置为奇数的行
      print(df.iloc[lambda x: [i for i in range(len(x)) if i % 2 == 1]])  # 输出Bob行
      

               Age City
      Bob       32   上海
      Charlie   28   广州
      David     40   深圳
             Age City
      Bob     32   上海
      David   40   深圳

      • 大型数据集:优先用 iloc(整数位置计算更快)
      • 复杂索引:用 loc 避免位置计算错误(如时间序列索引)
      • 混合场景:若需标签+位置混合索引,先重置索引再用 iloc
      df_reset = df.reset_index()
      df_reset.iloc[1:3, 0:2]  # 选择第1-2行,第0-1列
      
      index Age
      1 Bob 32
      2 Charlie 28

      当行索引为整数时,loc 会优先识别为标签而非位置:

      df_int_index = pd.DataFrame({"Value": [10, 20]}, index=[1, 2])
      
      # loc尝试按标签访问 → 报错(无标签0)
      # df_int_index.loc[0]  # KeyError
      
      # iloc按位置访问 → 正常
      print(df_int_index.iloc[0])  # 输出索引1的行(Value:10)
      

      Value    10
      Name: 1, dtype: int64

      iloc 支持负数索引(从末尾计数):

      print(df.iloc[-1])  # 输出最后一行(David)
      

      Age     40
      City    深圳
      Name: David, dtype: object

      场景 推荐方法 原因
      已知行/列标签(如列名为"Age") loc 直接标签访问,语义清晰
      按行号/列号操作(如前三行) iloc 位置计算高效
      时间序列数据(日期索引) loc 避免位置漂移(如df.loc["2023":"2025"])
      大数据集遍历 iloc 整数位置操作速度更快

      最佳实践:优先用 loc 保证可读性,性能敏感时切 iloc。始终通过 print(df.head()) 确认数据结构,避免索引混淆。

      到此这篇关于Pandas索引器 loc 和 iloc 比较及代码示例的文章就介绍到这了,更多相关Pandas索引器 loc 和 iloc内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

      您可能感兴趣的文章:

      • Python Pandas数据分析之iloc和loc的用法详解
      • 详谈Pandas中iloc和loc以及ix的区别
      • 聊聊Python pandas 中loc函数的使用,及跟iloc的区别说明
      • python选取特定列 pandas iloc,loc,icol的使用详解(列切片及行切片)
      • 一文秒懂pandas中iloc()函数
      • 利用Pandas读取某列某行数据之loc和iloc用法总结
      • Pandas中的loc与iloc区别与用法小结
      • 对pandas中iloc,loc取数据差别及按条件取值的方法详解
      • Python Pandas中loc和iloc函数的基本用法示例
      • python中pandas库的iloc函数用法解析

      站内搜索