鱼C论坛

 找回密码
 立即注册
查看: 23|回复: 1

DataFrame获取多列的索引机制

[复制链接]
发表于 前天 17:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

  1. df = pd.DataFrame(
  2.     dict(zip(['id','name','age','scores'],
  3.         [[1001,1002,1003,1004,1005,1006,1007],['bob','lim','judy','pandas','numpy',None,None]]))
  4.     ,index=pd.date_range("2026-01-01",periods=7,freq="B")
  5. )
  6. df
复制代码


运行:
                        id        name
2026-01-01        1001        bob
2026-01-02        1002        lim
2026-01-05        1003        judy
2026-01-06        1004        pandas
2026-01-07        1005        numpy
2026-01-08        1006        NaN
2026-01-09        1007        NaN

df[ 'id' ]可以获取的id列字段,df[ ['id', 'name'] ]获取id和name列两列,为什么df[ 'id' : 'name' ]运行报错呢,:切片是python的内置语法,为什么运用到df['id' : 'name']会报错,机制是什么呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 前天 17:07 | 显示全部楼层
在Pandas中,DataFrame的索引(通过方括号 [ ])有特殊的含义:

  • 如果传入单个列名(如 df['id']),则返回该列。
  • 如果传入列名列表(如 df[['id','name']]),则返回多列。
  • 如果传入一个切片(如 df[0:5]),则相当于对行索引进行切片,返回指定行范围的数据,与列表切片类似。


所以 df[:] 本身是合法的,它会返回DataFrame的所有行(即自身的一个视图或副本)。如果你运行 df[:] 遇到了报错,可能是你的操作环境或代码上下文有其他问题,比如在链式赋值中,或是在某些函数内使用了不支持的写法。

但如果你问的是 df[:, :] 这种带逗号的写法,那就会报错。因为DataFrame的方括号索引不支持逗号分隔的多个维度(不像NumPy数组)。Pandas中多维索引需要借助 .loc.iloc 方法。

总结机制:
- Python的切片语法([start:stop:step])在DataFrame的 [ ] 操作中默认作用于行索引,这与内置列表、元组的切片语义一致。
- 要同时对行和列进行切片,应当使用 df.loc['行标签切片', '列标签切片']df.iloc[行位置切片, 列位置切片]
- 因此,直接在 [ ] 内使用冒号切片只能获取行的子集,不能获取列的子集。若想获取所有列,可以不写列参数,例如 df.loc['2026-01-01':'2026-01-03'] 会获取指定行的所有列。

希望这个解释能帮助你理解DataFrame的索引机制。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-6-20 16:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表