当前位置: 首页 > news >正文

06_Pandas索引运算

文章目录

  • 1 DataFrame结构
    • 1.1 column/index/value
    • 1.2 单独取列/行
  • 2 基于位置定位
    • 2.1 行选取
    • 2.2 列选取
    • 2.3 行列交叉选取
  • 3 基于标签定位
    • 3.1 行选取
    • 3.2 列选取
    • 3.3 行列交叉选取
      • 3.3.1 query函数
      • 3.3.2 isin函数
    • 3.4 多条件索引

Pandas索引操作有两种常见类型:

  • 基于位置的索引(Position-based Indexing)
  • 基于标签的索引(Label-based Indexing)

实际操作中,第二种操作更常用。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

1 DataFrame结构

1.1 column/index/value

DataFrame主要包含以下三个部分:

  • column:列标签(Index对象)
  • index:行标签(Index对象)
  • value:数据域

基于标签定位就是靠Index对象,在此之外还有动态映射出来的虚拟列号和行号,可以直接基于数组下标进行定位,也就是基于位置定位。

df = pd.read_excel('data/source_data.xlsx')
df.index = np.arange(1001, 1008)
df
流量级别投放地区访客数支付转化率客单价支付金额
1001一级A区4430011.78%58.79306887.83
1002一级B区3061213.85%86.64367338.10
1003一级C区183892.50%0.28129.58
1004一级B区450910.73%64.1231035.14
1005一级C区37695.73%92.9120068.20
1006一级A区242422.07%89.3347791.60
1007一级C区24128.21%56.0411096.42

1.2 单独取列/行

DataFrame的行和列单独取出来都是一个Series对象,事实上,DataFrame对象就是将多个 Series对象组合到一起的结果。

# 单独取一列,两种方式
print(df['客单价'], end='\n\n')
print(df.客单价)
1001    58.79
1002    86.64
1003     0.28
1004    64.12
1005    92.91
1006    89.33
1007    56.04
Name: 客单价, dtype: float641001    58.79
1002    86.64
1003     0.28
1004    64.12
1005    92.91
1006    89.33
1007    56.04
Name: 客单价, dtype: float64
# 单独取一行,两种方式
print(df.loc[1005], end='\n\n')
print(df.iloc[4])
流量级别          一级
投放地区          C区
访客数         3769
支付转化率      5.73%
客单价        92.91
支付金额     20068.2
Name: 1005, dtype: object流量级别          一级
投放地区          C区
访客数         3769
支付转化率      5.73%
客单价        92.91
支付金额     20068.2
Name: 1005, dtype: object

2 基于位置定位

基于位置索引使用iloc[行号, 列号]进行选取。

df
流量级别投放地区访客数支付转化率客单价支付金额
1001一级A区4430011.78%58.79306887.83
1002一级B区3061213.85%86.64367338.10
1003一级C区183892.50%0.28129.58
1004一级B区450910.73%64.1231035.14
1005一级C区37695.73%92.9120068.20
1006一级A区242422.07%89.3347791.60
1007一级C区24128.21%56.0411096.42

DataFrame索引方式大体分为下面四种,其中行和列类似Numpy的索引运算,可以使用切片索引、花式索引、布尔索引。

  • df[列][行]:先选列再选行,链式索引,不推荐
  • df.loc[行][列]/df.iloc[行][列]:先取行再取列,链式索引可能产生副本,修改不会反映到原对象,不推荐
  • df.loc[行, 列]:标签方式一次性定位,推荐!
  • df.iloc[行, 列]:位置方式一次性定位,推荐!

2.1 行选取

# 连续选取,使用切片索引
df.iloc[2:5]
流量级别投放地区访客数支付转化率客单价支付金额
1003一级C区183892.50%0.28129.58
1004一级B区450910.73%64.1231035.14
1005一级C区37695.73%92.9120068.20

花式索引需要构造列表,将列表作为单个参数传入。

# 跨行选取,使用花式索引
df.iloc[[1, 3, 6]]
流量级别投放地区访客数支付转化率客单价支付金额
1002一级B区3061213.85%86.64367338.10
1004一级B区450910.73%64.1231035.14
1007一级C区24128.21%56.0411096.42

2.2 列选取

df.iloc[:, 1:4]
投放地区访客数支付转化率
1001A区4430011.78%
1002B区3061213.85%
1003C区183892.50%
1004B区450910.73%
1005C区37695.73%
1006A区242422.07%
1007C区24128.21%

2.3 行列交叉选取

df.iloc[2:5, [1, 5]]
投放地区支付金额
1003C区129.58
1004B区31035.14
1005C区20068.20

3 基于标签定位

基于标签定位使用loc['行标签', '列标签']进行选取。

注意:loc的切片是包含结束值的!!!

df
流量级别投放地区访客数支付转化率客单价支付金额
1001一级A区4430011.78%58.79306887.83
1002一级B区3061213.85%86.64367338.10
1003一级C区183892.50%0.28129.58
1004一级B区450910.73%64.1231035.14
1005一级C区37695.73%92.9120068.20
1006一级A区242422.07%89.3347791.60
1007一级C区24128.21%56.0411096.42

3.1 行选取

df.loc[1003: 1005]
流量级别投放地区访客数支付转化率客单价支付金额
1003一级C区183892.50%0.28129.58
1004一级B区450910.73%64.1231035.14
1005一级C区37695.73%92.9120068.20

结合布尔索引将判断结果作为掩码可以进行筛选数据。

df.loc[df['客单价'] > 80]
流量级别投放地区访客数支付转化率客单价支付金额
1002一级B区3061213.85%86.64367338.1
1005一级C区37695.73%92.9120068.2
1006一级A区242422.07%89.3347791.6

3.2 列选取

df[['投放地区', '客单价']]
投放地区客单价
1001A区58.79
1002B区86.64
1003C区0.28
1004B区64.12
1005C区92.91
1006A区89.33
1007C区56.04
df.loc[:, ['投放地区', '客单价']]
投放地区客单价
1001A区58.79
1002B区86.64
1003C区0.28
1004B区64.12
1005C区92.91
1006A区89.33
1007C区56.04

3.3 行列交叉选取

df.loc[(df['投放地区'] == 'B区') | (df['投放地区'] == 'C区'), ['投放地区', '访客数', '客单价']]
投放地区访客数客单价
1002B区3061286.64
1003C区183890.28
1004B区450964.12
1005C区376992.91
1007C区241256.04

3.3.1 query函数

query(exp, inplace=False)`:可以使用Python布尔表达式进行选取符合条件的行。

df.query("访客数 > 3000 and 访客数 < 20000")[['投放地区', '访客数', '客单价']]
投放地区访客数客单价
1003C区183890.28
1004B区450964.12
1005C区376992.91

3.3.2 isin函数

isin()函数:判断是否等于列表中的值。

df.loc[df['投放地区'].isin(['B区', 'C区']), ['投放地区', '访客数', '客单价']]
投放地区访客数客单价
1002B区3061286.64
1003C区183890.28
1004B区450964.12
1005C区376992.91
1007C区241256.04

3.4 多条件索引

在使用索引筛选出数据之后,只需要加个统计函数的尾巴就可以直接算出统计数值。

  • mean() #计算均值
  • std() #计算标准差
  • median() #计算中位数
  • max() #计算最大值
  • min() #计算最小值
print('客单价平均值', df['客单价'].mean())
客单价平均值 64.01571428571428

搭配布尔索引进一步进行统计筛选,使用&|时,表达式注意必须要用括号()括起来。

df.loc[(df['访客数'] > df['访客数'].mean()) & (df['客单价'] > df['客单价'].mean())]
流量级别投放地区访客数支付转化率客单价支付金额
1002一级B区3061213.85%86.64367338.1
http://www.dtcms.com/a/439982.html

相关文章:

  • 泰安建设厅网站建设局网站建设方案书
  • 怎么看别人网站是哪里做的乐亭中关村建站快车
  • 小迪web自用笔记51
  • 长沙娱乐网站开发新媒体管家
  • keras使用mnist数据集
  • 做定制网站怎么样wow313做宏的网站
  • Linux 进程信号:从进阶特性到实战应用(下)
  • 沈阳网络建网站个人外贸展示型网站建设
  • 主流编程范式解析:从原理到应用场景
  • 公司建立网站的意义浦口区网站建设
  • 青岛网站建设铭盛信息公众号 wordpress
  • 网站建设方案书 内容管理制度域名怎么进入网址
  • 网站建设服务版权归谁建设一个公司网站需要多少钱
  • 微信微网站怎么进入专业网站建设最便宜
  • 阿里指数官方网站短视频营销推广方案
  • 好大夫王建设在线个人网站推广自身网站
  • 长白山开发建设集团网站新网站一般建设空间大小
  • 做废钢铁生意在哪个网站了解wordpress页面调用文章列表
  • 如何制作钓鱼网站网站开发 技术方案
  • 域名网站负责人的责任小型企业网站建设内容
  • 拼图小游戏开发日记 | Day1
  • 绿色在线网站建行官方网站登录
  • 门户网站建设服务收费北京网站建设小鱼在线
  • 做网站排名要懂那些做网站需要了解什么软件
  • 莆田做网站排名装修十大风格
  • 域名备案后怎样做网站有什么做家纺的网站
  • 网络公司 网站源码青岛做网站公司电话
  • 悬浮网站右侧带鼠标经过二维码显示特效代码做网站设计赚不赚钱
  • 网站建设 微信公众号html做的网页怎么变成网站
  • 我的世界服务器赞助网站怎么做十大编程语言