Python Pandas 数据选择:灵活筛选和操作数据的多种方式

news2024/10/26 2:20:26

Python Pandas 数据选择:灵活筛选和操作数据的多种方式

本文详细介绍了在 Pandas 中如何进行数据选择与筛选,涵盖了 lociloc、条件过滤等多种操作方式。通过示例展示了如何选择单列、多列、特定行,以及基于标签和位置的选择方式。文中还介绍了 Series 与 DataFrame 的数据选择方法,结合 NumPy 数据与 Pandas 的互操作性,使数据处理更加灵活高效。此外,文章展示了如何利用条件过滤进行数据筛选,并通过使用 ~|& 操作符优化选择操作。这些技巧适用于需要高效处理数据的分析任务。

文章目录

  • Python Pandas 数据选择:灵活筛选和操作数据的多种方式
      • 一 多种数据选择方式
        • 构建表格数据
        • 选择单列数据
        • 选择多个列数据
      • 二 使用 `loc` 选择数据
        • NumPy 取数
        • DataFrame 取数
        • 选择特定行
        • 不按顺序设置索引
      • 三 使用 `iloc` 按位置选择数据
      • 四 `loc` 和 `iloc` 混合使用
        • 获取行标签
        • 根据标签选择列
        • 获取标签对应的索引
        • 获取标签对应的行索引
      • 五 条件过滤数据
      • 六 Series 与 DataFrame 类似
      • 七 完整代码示例
      • 八 源码地址

导入依赖库

import pandas as pd
import numpy as np

一 多种数据选择方式

构建表格数据

首先,我们构建一个包含 6 行 4 列的表格数据:

data = np.arange(-12, 12).reshape((6, 4))
df = pd.DataFrame(data, index=list("abcdef"), columns=list("ABCD"))
print(df)
选择单列数据

要选择单个列,例如列 “B”:

print(df["B"])
选择多个列数据

可以使用 NumPy 或 Pandas 选择多个列的数据:

print("numpy:\n", data[:, [2, 1]])
print("\ndf:\n", df[["C", "B"]])

二 使用 loc 选择数据

loc 提供了基于标签的选择方式。

NumPy 取数
print(data[2:3, 1:3])
DataFrame 取数
print(df.loc["c":"d", "B":"D"])
选择特定行

可以选择特定的多行数据:

print("numpy:\n", data[[3, 1], :])
print("\ndf:\n", df.loc[["d", "b"], :])
不按顺序设置索引

创建一个不按顺序设置索引的 DataFrame:

df2 = pd.DataFrame(data, index=list("beacdf"), columns=list("ABCD"))
print(df2)
print(df2.loc["e":"c"])

三 使用 iloc 按位置选择数据

iloc 用于基于整数位置选择数据。

print("numpy:\n", data[2:3, 1:3])
print("\ndf:\n", df.iloc[2:3, 1:3])
print("numpy:\n", data[[3, 1], :])
print("\ndf:\n", df.iloc[[3, 1], :])

lociloc 混合使用

获取行标签

首先使用序号索引转换成 loc 的标签索引:

row_labels = df.index[2:4]
print("row_labels:\n", row_labels)
print("\ndf:\n", df.loc[row_labels, ["A", "C"]])
根据标签选择列
col_labels = df.columns[[0, 3]]
print("col_labels:\n", col_labels)
print("\ndf:\n", df.loc[row_labels, col_labels])
获取标签对应的索引

使用标签获取对应的索引,并在 iloc 中使用:

col_index = df.columns.get_indexer(["A", "B"])
print("col_index:\n", col_index)
print("\ndf:\n", df.iloc[:2, col_index])
获取标签对应的行索引
print(df.index.get_indexer(["a", "b"]))

五 条件过滤数据

可以基于条件筛选数据:

# 选择列 "A" 中小于 0 的数据
print(df[df["A"] < 0])

# 选择第一行数据不小于 -10 的列
print("~:\n", df.loc[:, ~(df.iloc[0] < -10)])
print("\n>=:\n", df.loc[:, df.iloc[0] >= -10])

# 选择第一行数据不小于 -10 或小于 -11 的列
print(df.loc[:, ~(df.iloc[0] < -10) | (df.iloc[0] < -11)])

loc 更适用于基于标签或条件的选择,而 iloc 更适用于基于位置的选择。

  • ~ 表示 “非” 或者 “取反”。
  • | 表示 “或”(or)。
  • & 表示 “与”(and)。

六 Series 与 DataFrame 类似

Series 对象的使用与 DataFrame 非常相似:

list_data = list(range(-4, 4))
s = pd.Series(list_data, index=list("abcdefgh"))
print(s)

# 使用标签筛选数据
print(s.loc[["a", "g", "c"]], "\n")
print(s.loc["c": "f"])

# 使用索引位置筛选数据
print(s.iloc[[3, 1, 5]], "\n")
print(s.iloc[2: 4])

# 混合使用 `iloc` 和 `loc`
print(s.iloc[s.index.get_indexer(["c", "d"])] , "\n")
print(s.loc[s.index[[3, 2]]])

# 按条件过滤数据
print(s.loc[s < 3], "\n")
print(s.loc[(s < 0) & (s > -2)], "\n")
print(s.loc[(s < 0) | (s > 2)], "\n")

NumPy 数据和 Pandas 数据可以互相转换,方便数据处理。

七 完整代码示例

# This is a sample Python script.

# Press ⌃R to execute it or replace it with your code.
# Press Double ⇧ to search everywhere for classes, files, tool windows, actions, and settings.
import pandas as pd
import numpy as np


def print_hi(name):
    # Use a breakpoint in the code line below to debug your script.
    print(f'Hi, {name}')  # Press ⌘F8 to toggle the breakpoint.
    # 主要方法
    # 选Column
    # loc
    # iloc
    # loc和iloc混搭
    # 条件过滤筛选
    # Series和DataFrame类似

    # 多种选取方式
    # 构建Excel 型的表格数据

    data = np.arange(-12, 12).reshape((6, 4))
    df = pd.DataFrame(
        data,
        index=list("abcdef"),
        columns=list("ABCD"))
    print(df)
    # 选Column
    print(df["B"])
    # 多选几个列
    print("numpy:\n", data[:, [2, 1]])
    print("\ndf:\n", df[["C", "B"]])

    # loc,像Excel一样取数
    # numpy取数
    print(data[2:3, 1:3])
    # DataFrame 取数
    print(df.loc["c":"d", "B":"D"])
    # 单行取数
    print("numpy:\n", data[[3, 1], :])
    print("\ndf:\n", df.loc[["d", "b"], :])
    # 不按顺序设置索引
    df2 = pd.DataFrame(
        data,
        index=list("beacdf"),
        columns=list("ABCD"))
    print(df2)
    print(df2.loc["e":"c"])

    # iloc,按数据位置取数
    print("numpy:\n", data[2:3, 1:3])
    print("\ndf:\n", df.iloc[2:3, 1:3])
    print("numpy:\n", data[[3, 1], :])
    print("\ndf:\n", df.iloc[[3, 1], :])

    # loc和iloc混搭
    # 序号索引转换成 .loc 的标签索引,根据索引获取标签
    row_labels = df.index[2:4]
    print("row_labels:\n", row_labels)
    print("\ndf:\n", df.loc[row_labels, ["A", "C"]])
    # labels 取 Column
    col_labels = df.columns[[0, 3]]
    print("col_labels:\n", col_labels)
    print("\ndf:\n", df.loc[row_labels, col_labels])
    # 把索引找出来放到 iloc 里用,根据标签获取索引
    col_index = df.columns.get_indexer(["A", "B"])
    print("col_index:\n", col_index)
    print("\ndf:\n", df.iloc[:2, col_index])
    # label 对应的 index
    print(df.index.get_indexer(["a", "b"]))

    # 条件过滤筛选
    # 选在 A Column 中小于 0 的那些数据
    print(df[df["A"] < 0])
    # 选在第一行数据不小于 -10 的数据 ,~ 来表示 非 或者 取反,第二种是直接用 >=-10 来筛选。
    print("~:\n", df.loc[:, ~(df.iloc[0] < -10)])
    print("\n>=:\n", df.loc[:, df.iloc[0] >= -10])
    # 选在第一行数据不小于 - 10 或小于 - 11 的数据
    # 或 | 来表示 or 的意思, & 表述 and
    print()
    i0 = df.iloc[0]
    print(i0)
    print(df.loc[:, ~(i0 < -10) | (i0 < -11)])
    print(~(df.iloc[0] < -10))
    # 基于标签或条件来选择数据,应该使用.loc;基于位置或已知的行列索引列表来选择数据,应该使用.iloc。

    # Series和DataFrame类似
    list_data = list(range(-4, 4))
    s = pd.Series(
        list_data,
        index=list("abcdefgh"))
    print(s)
    # 标签筛选数据.loc
    print(s.loc[["a", "g", "c"]], "\n")
    print(s.loc["c": "f"])
    # index 筛选数据.iloc
    print(s.iloc[[3, 1, 5]], "\n")
    print(s.iloc[2: 4])
    # iloc 和 loc 互相混用
    print(s.iloc[s.index.get_indexer(["c", "d"])], "\n")
    print(s.loc[s.index[[3, 2]]])
    # 按条件过滤筛选
    print(s.loc[s < 3], "\n")
    print(s.loc[(s < 0) & (s > -2)], "\n")
    print(s.loc[(s < 0) | (s > 2)], "\n")
    #  Numpy数据可以和Pandas数据 互转


if __name__ == '__main__':
    print_hi('选取数据')

# See PyCharm help at https://www.jetbrains.com/help/pycharm/

复制粘贴并覆盖到你的 main.py 中运行,运行结果如下。

Hi, 选取数据
    A   B   C   D
a -12 -11 -10  -9
b  -8  -7  -6  -5
c  -4  -3  -2  -1
d   0   1   2   3
e   4   5   6   7
f   8   9  10  11
a   -11
b    -7
c    -3
d     1
e     5
f     9
Name: B, dtype: int64
numpy:
 [[-10 -11]
 [ -6  -7]
 [ -2  -3]
 [  2   1]
 [  6   5]
 [ 10   9]]

df:
     C   B
a -10 -11
b  -6  -7
c  -2  -3
d   2   1
e   6   5
f  10   9
[[-3 -2]]
   B  C  D
c -3 -2 -1
d  1  2  3
numpy:
 [[ 0  1  2  3]
 [-8 -7 -6 -5]]

df:
    A  B  C  D
d  0  1  2  3
b -8 -7 -6 -5
    A   B   C   D
b -12 -11 -10  -9
e  -8  -7  -6  -5
a  -4  -3  -2  -1
c   0   1   2   3
d   4   5   6   7
f   8   9  10  11
   A  B  C  D
e -8 -7 -6 -5
a -4 -3 -2 -1
c  0  1  2  3
numpy:
 [[-3 -2]]

df:
    B  C
c -3 -2
numpy:
 [[ 0  1  2  3]
 [-8 -7 -6 -5]]

df:
    A  B  C  D
d  0  1  2  3
b -8 -7 -6 -5
row_labels:
 Index(['c', 'd'], dtype='object')

df:
    A  C
c -4 -2
d  0  2
col_labels:
 Index(['A', 'D'], dtype='object')

df:
    A  D
c -4 -1
d  0  3
col_index:
 [0 1]

df:
     A   B
a -12 -11
b  -8  -7
[0 1]
    A   B   C  D
a -12 -11 -10 -9
b  -8  -7  -6 -5
c  -4  -3  -2 -1
~:
     C   D
a -10  -9
b  -6  -5
c  -2  -1
d   2   3
e   6   7
f  10  11

>=:
     C   D
a -10  -9
b  -6  -5
c  -2  -1
d   2   3
e   6   7
f  10  11

A   -12
B   -11
C   -10
D    -9
Name: a, dtype: int64
    A   C   D
a -12 -10  -9
b  -8  -6  -5
c  -4  -2  -1
d   0   2   3
e   4   6   7
f   8  10  11
A    False
B    False
C     True
D     True
Name: a, dtype: bool
a   -4
b   -3
c   -2
d   -1
e    0
f    1
g    2
h    3
dtype: int64
a   -4
g    2
c   -2
dtype: int64 

c   -2
d   -1
e    0
f    1
dtype: int64
d   -1
b   -3
f    1
dtype: int64 

c   -2
d   -1
dtype: int64
c   -2
d   -1
dtype: int64 

d   -1
c   -2
dtype: int64
a   -4
b   -3
c   -2
d   -1
e    0
f    1
g    2
dtype: int64 

d   -1
dtype: int64 

a   -4
b   -3
c   -2
d   -1
h    3
dtype: int64 

八 源码地址

代码地址:

国内看 Gitee 之 pandas/选取数据.py

国外看 GitHub 之 pandas/选取数据.py

引用 莫烦 Python

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2223713.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

qt 下载安装

1. 官网地址 https://www.qt.io/ 2. 下载 使用邮箱注册账号&#xff0c;登录&#xff0c;后边安装时也用的到 登录后&#xff1a; 这里需要电话号验证&#xff0c;电话号需要正确的&#xff0c;其他随便填&#xff0c;电话号中国区前需要86&#xff0c; 验证后自动下载 …

[CSP-J 2023] 一元二次方程(模拟)

变态的大模拟…… 洛谷题目传送门https://www.luogu.com.cn/problem/P9750 解题思路 主要还是模拟&#xff0c;题目让你求啥你就求啥&#xff0c;要注意细节。 然后化简根式的可以用质因数分解一下即可。 代码 #include<bits/stdc.h> using namespace std; #define …

opencv 图像翻转- python 实现

在做图像数据增强时会经常用到图像翻转操作 flip。 具体代码实现如下&#xff1a; #-*-coding:utf-8-*- # date:2021-03 # Author: DataBall - XIAN # Function: 图像翻转import cv2 # 导入OpenCV库path test.jpgimg cv2.imread(path)# 读取图片 cv2.namedWindow(image,1) …

C++基础与实用技巧第三节:内存管理与性能优化

第二章&#xff1a;C基础与实用技巧 第三节&#xff1a;内存管理与性能优化 1. 动态内存的管理策略与技巧 动态内存管理是C编程的核心部分之一&#xff0c;合理管理内存可以极大提高程序的性能和稳定性。在C中&#xff0c;动态内存的分配和释放通常使用new和delete运算符&am…

LeetCode_2427. 公因子的数目_java

1、题目 2427. 公因子的数目https://leetcode.cn/problems/number-of-common-factors/ 给你两个正整数 a 和 b &#xff0c;返回 a 和 b 的 公 因子的数目。 如果 x 可以同时整除 a 和 b &#xff0c;则认为 x 是 a 和 b 的一个 公因子 。 示例 1&#xff1a; 输入&#x…

基于springboot企业微信SCRM管理系统源码带本地搭建教程

系统是前后端分离的架构&#xff0c;前端使用Vue2&#xff0c;后端使用SpringBoot2。 技术框架&#xff1a;SpringBoot2.0.0 Mybatis1.3.2 Shiro swagger-ui jpa lombok Vue2 Mysql5.7 运行环境&#xff1a;jdk8 IntelliJ IDEA maven 宝塔面板 系统与功能介绍 基…

实现prometheus+grafana的监控部署

直接贴部署用的文件信息了 kubectl label node xxx monitoringtrue 创建命名空间 kubectl create ns monitoring 部署operator kubectl apply -f operator-rbac.yml kubectl apply -f operator-dp.yml kubectl apply -f operator-crd.yml # 定义node-export kubectl app…

RHCE的练习(4)

多端口访问多网站 第一步&#xff1a; 关闭防火墙&#xff08;因为要与外部连接访问&#xff09; [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0第二步&#xff1a; 创建新IP地址&#xff08;用于区分&#xff09; [rootlocalhost ~]# nmcli…

【南方科技大学】CS315 Computer Security 【Lab6 IoT Security and Wireless Exploitation】

目录 Introduction (Part 1: OS Security for IoT )Software RequirementsStarting the Lab 6 Virtual MachineSetting up the Zephyr Development EnvironmentDownload the Zephyr Source CodeInstalling Requirements and DependenciesSetting the Project’s Environment Va…

PoissonRecon学习笔记

1. Screened Poisson Reconstruction (SPR) 源码&#xff1a;https://github.com/mkazhdan/PoissonRecon However, as noted by several researchers, it suffers from a tendency to over-smooth the data. 泊松重建存在过度平滑的现象。 方法&#xff1a;position and gradi…

为Windows Terminal 配置zsh + Oh-My-Zsh!

参考&#xff1a; 为Windows Terminal 配置zsh Oh-My-Zsh! [非WSL] https://zhuanlan.zhihu.com/p/625583037 Package: zsh - MSYS2 Packages 安装配置 1、安装 Windows Terminal(必须) Method 1: 打开 Microsoft Store&#xff0c;搜索 “Windows Terminal”。点击 “…

Web应用框架-Django应用基础

1. 认识Django Django是一个用Python编写的开源高级Web框架&#xff0c; 旨在快速开发可维护和可扩展的Web应用程序。 使用Django框架的开发步骤&#xff1a; 1.选择合适的版本 2.安装及配置 3.生成项目结构 4.内容开发 5.迭代、上线、维护 Django官网&#xff1a; Djang…

开源表单生成器OpnForm

什么是 OpnForm &#xff1f; OpnForm 是一个开源的表单构建工具&#xff0c;旨在简化创建自定义表单的过程&#xff0c;特别适合无编码知识的用户。它通过人工智能优化表单创建流程&#xff0c;支持多种用途&#xff0c;如联系人表单、调查表等。OpnForm 提供了一个直观的拖放…

最优化方法-无约束优化算法(最速下降法)matlab实现

一、前言 最速下降法 &#xff0c;又称为梯度法&#xff0c;是一种无约束求解多元函数极小值的方法。最速下降法的起源可以追溯到19世纪&#xff0c;最早由数学家Cauchy在1847年提出。随着计算机技术的发展&#xff0c;最速下降法在20世纪50年代逐渐应用于各种优化问题&#x…

BD数字化装备车场:RFID技术的突破之道

传统的车库管理流程主要依赖手工方式&#xff0c;这无疑降低了作业效率&#xff0c;尤其在任务高峰期或紧急情况下&#xff0c;车库进出口的交通堵塞问题尤为突出。随着2023年的到来&#xff0c;我国相继发布了《交通强国建设纲要》与《数字中国建设整体布局规划》等关键政策文…

Uni-App-01

HBuilder安装卸载 安装 下载HBuilder最新版 解压到安装目录&#xff0c;路径中不要有中文和空格 在桌面上增加快捷方式 卸载 执行reset.bat 删除HBuilder文件夹&#xff08;如果提示文件被占用&#xff0c;杀死相关进程再删除&#xff09; 夜神模拟器安装 安装 下…

Flutter项目打包ios, Xcode 发布报错 Module‘flutter barcode_scanner‘not found

报错图片 背景 flutter 开发的 apple app 需要发布新版本&#xff0c;但是最后一哆嗦碰到个报错&#xff0c;这个小问题卡住了我一天&#xff0c;之间的埪就不说了&#xff0c;直接说我是怎么解决的&#xff0c;满满干货 思路 这个报错 涉及到 flutter_barcode_scanner; 所…

智能园艺:Spring Boot植物健康系统

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理植物健康系统的相关信息成为必然。开发合适…

《面向对象系统分析与设计》三级项目

文章目录 一、项目总体要求<设计模式应用>第一次文档要求第二次文档要求 二、示例第一次文档 - 设计原则应用1、题目描述2、设计:(1&#xff09;优化理由陈述(2&#xff09;类图(3)实现代码 第二次文档 - 设计模式应用1、题目描述2、设计:(1) 优化理由陈述(2&#xff09;…

PostGis空间(下):空间连接与空间索引

目录 1、简介2、空间连接3、空间索引3.1 索引操作3.2 空间索引的工作原理3.2.1 R-Tree 3.3 空间索引函数3.4 仅索引查询3.5 ANALYZE3.6 VACUUMing3.7 函数列表 PS 1024到啦&#xff01;&#xff01;&#xff01; 先祝各位程序员或者想成为程序员正在奋斗中的伙伴1024程序员节快…