You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas DataFrame.loc三种括号用法差异:loc[x,y]、loc[x][y]、loc[[x]][y]

Pandas中loc三种写法的区别详解

嘿,这个问题问得太到位了!很多刚上手Pandas的朋友都会被这几种看似差不多的写法绕晕,我来给你逐个拆解清楚:

1. df.loc['Second', 'count']

这是Pandas官方最推荐的原生用法,直接通过「行标签, 列标签」的方式精准定位单个元素,返回的是一个标量值(比如例子里的3)。这种写法是Pandas设计的最优路径,没有中间步骤,效率最高,而且完全不会有链式索引的潜在问题,不管是读还是写操作都很安全。

2. df.loc['Second']['count']

这属于链式索引,相当于分两步走:先执行df.loc['Second']得到一行数据(一个Series对象),再从这个Series里提取count列的值。虽然读取数据时结果和第一种一样,但这里藏着个大坑:如果是做赋值操作(比如df.loc['Second']['count'] = 10),很可能会触发SettingWithCopyWarning——因为Pandas没法确定你是在修改原DataFrame还是它的一个临时副本,容易出现数据不更新的诡异问题。所以除非你特别清楚自己在干嘛,否则尽量别用这种写法。

3. df.loc[['Second'], 'count']

这里的行标签用列表包裹了,哪怕只有一个元素,Pandas也会把它当成「多行选择」来处理,返回的是一个Series对象(例子里的输出是Second 3,带着索引)。这种写法适合你需要保留行索引结构的场景,比如后续要对这组数据做批量运算、合并等操作,而不是只拿一个孤立的值。

实际代码验证

我们用你给出的代码来直观感受差异:

import pandas as pd
import numpy as np

df = pd.DataFrame(np.arange(6).reshape(3, 2), columns=['price', 'count'], index=['First', 'Second', 'Third']) 
print(df) 
# 输出:
#        price  count
# First      0      1
# Second     2      3
# Third      4      5 

print(df.loc['Second', 'count']) # 输出:3(标量)
print(df.loc['Second']['count']) # 输出:3(标量,但链式索引)
print(df.loc[['Second'], 'count']) # 输出:
# Second    3
# Name: count, dtype: int64(带索引的Series)

内容的提问来源于stack exchange,提问作者Konstantin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:02:03