pandas 数据索引与选取

简介: 我们对 DataFrame 进行选择,大抵从这三个层次考虑:行列、区域、单元格。其对应使用的方法如下:一. 行,列 --> df[]二. 区域   --> df.loc[], df.iloc[], df.

我们对 DataFrame 进行选择,大抵从这三个层次考虑:行列、区域、单元格。
其对应使用的方法如下:
一. 行,列 --> df[]
二. 区域   --> df.loc[], df.iloc[], df.ix[]
三. 单元格 --> df.at[], df.iat[]

 

下面开始练习:

import numpy as np
import pandas as pd

df = pd.DataFrame(np.random.randn(6,4), index=list('abcdef'), columns=list('ABCD'))


1. df[]:

一维
行维度:
    整数切片、标签切片、<布尔数组>
列维度:
    标签索引、标签列表、Callable

df[:3]
df['a':'c']
df[[True,True,True,False,False,False]] # 前三行(布尔数组长度等于行数)
df[df['A']>0] # A列值大于0的行
df[(df['A']>0) | (df['B']>0)] # A列值大于0,或者B列大于0的行
df[(df['A']>0) & (df['C']>0)] # A列值大于0,并且C列大于0的行

 

df['A']
df[['A','B']]
df[lambda df: df.columns[0]] # Callable


2. df.loc[]

二维,先行后列
行维度:
    标签索引、标签切片、标签列表、<布尔数组>、Callable
列维度:
    标签索引、标签切片、标签列表、<布尔数组>、Callable
    

df.loc['a', :]
df.loc['a':'d', :]
df.loc[['a','b','c'], :]
df.loc[[True,True,True,False,False,False], :] # 前三行(布尔数组长度等于行数)
df.loc[df['A']>0, :]
df.loc[df.loc[:,'A']>0, :]
df.loc[df.iloc[:,0]>0, :]
df.loc[lambda _df: _df.A > 0, :]

 

df.loc[:, 'A']
df.loc[:, 'A':'C']
df.loc[:, ['A','B','C']]
df.loc[:, [True,True,True,False]] # 前三列(布尔数组长度等于行数)
df.loc[:, df.loc['a']>0]          # a行大于0的列
df.loc[:, df.iloc[0]>0]           # 0行大于0的列
df.loc[:, lambda _df: ['A', 'B']]

 

df.A.loc[lambda s: s > 0]


3. df.iloc[]

二维,先行后列
行维度:
    整数索引、整数切片、整数列表、<布尔数组>
列维度:
    整数索引、整数切片、整数列表、<布尔数组>、Callable

df.iloc[3, :]
df.iloc[:3, :]
df.iloc[[0,2,4], :]
df.iloc[[True,True,True,False,False,False], :] # 前三行(布尔数组长度等于行数)
df.iloc[df['A']>0, :]       #× 为什么不行呢?想不通!
df.iloc[df.loc[:,'A']>0, :] #×
df.iloc[df.iloc[:,0]>0, :]  #×
df.iloc[lambda _df: [0, 1], :]

 

df.iloc[:, 1]
df.iloc[:, 0:3]
df.iloc[:, [0,1,2]]
df.iloc[:, [True,True,True,False]] # 前三列(布尔数组长度等于行数)
df.iloc[:, df.loc['a']>0] #×
df.iloc[:, df.iloc[0]>0]  #×
df.iloc[:, lambda _df: [0, 1]]


4. df.ix[]

二维,先行后列
行维度:
    整数索引、整数切片、整数列表、
    标签索引、标签切片、标签列表、
    <布尔数组>、
    Callable
列维度:
    整数索引、整数切片、整数列表、
    标签索引、标签切片、标签列表、
    <布尔数组>、
    Callable

df.ix[0, :]
df.ix[0:3, :]
df.ix[[0,1,2], :]

df.ix['a', :]
df.ix['a':'d', :]
df.ix[['a','b','c'], :]

 

df.ix[:, 0]
df.ix[:, 0:3]
df.ix[:, [0,1,2]]

df.ix[:, 'A']
df.ix[:, 'A':'C']
df.ix[:, ['A','B','C']]

 


5. df.at[]

精确定位单元格
行维度:
    标签索引
列维度:
    标签索引

df.at['a', 'A']


6. df.iat[]

精确定位单元格

行维度:
    整数索引
列维度:
    整数索引

df.iat[0, 0]

 



目录
相关文章
|
存储 数据采集 XML
再谈主数据管理|一文读懂主数据项目实施
主数据管理是企业改善其关键数据资产(如产品数据,资产数据,客户数据,位置数据等)的一致性和质量的必要数据管理活动。
|
Python
Python 判断字符串是否包含子字符串
Python 判断字符串是否包含子字符串
1271 0
|
NoSQL Linux MongoDB
CentOS 7.6安装 MongoDB 5.0.2
CentOS 7.6安装 MongoDB 5.0.2
2219 0
CentOS 7.6安装 MongoDB 5.0.2
|
SQL 存储 缓存
Hadoop-Impala优化十大指导原则和最佳实践(二)
简介: 以下是性能准则和最佳做法。您可以使用在规划过程中实验,和hadoop集群一起进行impala的性能调整。所有这些信息也可在文档的其他地方更详细的impala文档;以下是优化的方法措施,强调优化调优技术提供最高的投资回报
1856 0
|
11月前
如何看PAI产品下训练(train)模型任务的费用细节
PAI产品下训练(train)模型任务的费用细节
210 6
|
数据采集 机器学习/深度学习 人工智能
[大语言模型-论文精读] 利用多样性进行大型语言模型预训练中重要数据的选择
[大语言模型-论文精读] 利用多样性进行大型语言模型预训练中重要数据的选择
|
Cloud Native Go Python
解决Pandas KeyError: “None of [Index([...])] are in the [columns]“问题
解决Pandas KeyError: “None of [Index([...])] are in the [columns]“问题
903 0
torch.fill()是怎么使用的?
torch.fill_()函数是一个in-place操作,用于将张量的所有元素设置为给定的标量值。它接受一个标量参数作为输入,该标量将用于填充整个张量。
1508 0
|
开发工具 git
git 强制更新远程分支覆盖本地分支
git fetch --all git reset --hard origin/分支名称 git pull
940 0
|
Linux
redhat 9 仓库报错修复
redhat 9 仓库报错修复
1050 0