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

为何DataFrame与列表的索引取值逻辑存在差异?

搞懂Pandas DataFrame的索引逻辑

哈哈,你完全猜对了!这确实是Pandas DataFrame和Python列表索引逻辑的核心差异点,很多刚上手Pandas的同学都会在这里打个小磕绊~

为什么df[0]返回的是列不是行?

Python原生列表是嵌套一维结构,a[0]取的是外层列表的第一个元素(也就是第一行子列表);而Pandas DataFrame是专门为二维表格数据设计的,它默认把列作为优先操作的单元(毕竟数据分析中经常按列做统计、清洗),所以直接用方括号df[col_label]时,提取的是对应标签的整列数据。

就拿你定义的这个DataFrame来说:

import pandas as pd
df = pd.DataFrame([[1,2,3,4],[5,6,7,8]])

它的列默认标签是0、1、2、3,行索引是0、1,所以df[0]自然会返回标签为0的整列:

0    1
1    5
Name: 0, dtype: int64

那怎么获取DataFrame的整行数据?

如果你想实现和列表a[0]一样取第一行的效果,有两种常用且规范的方法:

  • 用iloc按位置索引:df.iloc[0],这是严格按行的位置来提取,返回的是第一行的Series:
    0    1
    1    2
    2    3
    3    4
    Name: 0, dtype: int64
    
  • 用loc按行标签索引:如果你的行是默认的数字索引,df.loc[0]和iloc[0]效果一致;如果行标签是自定义的字符串/其他值,就用对应的标签来取。

另外补充个小技巧:如果要同时定位行和列,推荐用df.iloc[row_pos, col_pos]或者df.loc[row_label, col_label]的方式,比链式索引(比如df[0][0])更安全,也更易读哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:12:46