Pandas.DataFrame.loc[ ] 筛选数据-标签法 详解 含代码 含测试数据集 随Pandas版本持续更新

news2024/9/27 21:21:08

关于Pandas版本: 本文基于 pandas2.1.2 编写。

关于本文内容更新: 随着pandas的stable版本更迭,本文持续更新,不断完善补充。

Pandas稳定版更新及变动内容整合专题: Pandas稳定版更新及变动迭持续更新。

Pandas API参考所有内容目录

本节目录

  • Pandas.DataFrame.loc[]
    • 语法:
    • 返回值:
    • 语法说明:
      • 1、筛选1行,筛选1列,筛选单元格
      • 2、筛选多行,筛选多列
      • 3、范围筛选
      • 4、布尔筛选
      • 5、Callable 筛选
    • 相关方法:
    • 示例:

Pandas.DataFrame.loc[]

Pandas.DataFrame.loc[] 方法用于通过索引、列名 筛选 DataFrame 数据。

  • 注意!在此方法中,你传递的数字,不会被理解为 自然索引,只作为字符串传递给 DataFrame.loc 视为行索引的值,或列名的值。
  • ⚠️ 注意 :

    • 在此方法中,你传递的数字,不会被理解为 自然索引,只作为字符串传递给 DataFrame.loc 视为行索引的值,或列名的值。
    • 如果对具有 多层索引DataFrame 进行范围筛选,必须先对其进行排序 推荐使用 df.sort_index(inplace=True)排序后再进行范围筛选。
    • 支持筛选后对原数据进行赋值 例10

语法:

DataFrame.loc [‘行索引’,‘列名’]

返回值:

  • Series or DataFrame or Scalar
    • 筛选范围、DataFrame 是否具有多层索引等都会影响具体的返回形式。
    • 如果筛选结果是 SeriesScalar 时,筛选条件套上 [ ] 方括号,可以强制以 DataFrame 样式返回。例1

语法说明:

1、筛选1行,筛选1列,筛选单元格

  • DataFrame.loc[索引,列名] 例1

    索引筛选条件、列名筛选条件,用英文逗号分隔。

    • 筛选1行: DataFrame.loc[‘索引’,: ] 只传递索引条件时,红色逗号、冒号可以省略。红色的冒号表示所有列。

    • 筛选1列: DataFrame.loc[:, ‘列名’] 红色冒号必须有,表示所有行。

    • 筛选单元格: DataFrame.loc[‘索引’, ‘列名’]

      如果 DataFrame 有多层索引、列名,当你想筛选非顶层数据时,需要用 元组 传递索引、列名的层级。例2

2、筛选多行,筛选多列

  • DataFrame.loc[[‘索引1’,‘索引2’, …],[‘列名1’,‘列名2’, …]]例3

    多个索引筛选条件用方括号包裹、多个列名筛选条件用方括号包裹。两种条件用英文逗号分隔。

    • 筛选多行: DataFrame.loc[[‘索引1’,‘索引2’, …], ] 只传递索引条件时,红色逗号可以省略。
    • 筛选多列: DataFrame.loc[, [‘列名1’,‘列名2’, …]]
    • 同时筛选多行多列: DataFrame.loc[[‘索引1’,‘索引2’, …], [‘列名1’,‘列名2’, …]]
    • ⚠️ 注意 :

      • 多个条件,必须用 [ ] 方括号包裹!

      • Python切片 不同,被 [ ] 包裹的开始和结束位置的元素,都会包含在筛选条件内。

      • 如果 DataFrame 有多层索引、列名,当你想筛选非顶层数据时,需要用 元组 传递索引、列名的层级。例4

3、范围筛选

  • DataFrame.loc[[‘索引1’:‘索引2’] 例5

    支持行的范围筛选,开始和结束的范围用英文冒号分隔。不支持列的范围筛选

    • 只筛选行范围: DataFrame.loc[[‘索引1’:‘索引2’], ] 只传递索引条件时,红色逗号可以省略。

    • 筛选行范围 + 筛选1列: DataFrame.loc[[‘索引1’:‘索引2’], ‘列名1’]

    • 筛选行范围 + 筛选多列: DataFrame.loc[[‘索引1’:‘索引2’], [‘列名1’,‘列名2’, …]]

    • ⚠️ 注意 :

      • 开始和结束的范围,必须用 : 英文冒号分隔!

      • 范围,必须用 [ ] 方括号包裹!

      • Python切片 不同,被 [ ] 包裹的范围,开始和结束位置,都会包含在筛选条件内。

    如果 DataFrame 有多层索引、列名,起始范围,必须精确到最底层的索引或列名。因为顶层索引、列名,可能代表着多行或多列,这是不能作为开始条件使用的。例6

    如果对具有 多层索引DataFrame 进行范围筛选,必须先对其进行排序 推荐使用 df.sort_index(inplace=True)排序后再进行范围筛选。

4、布尔筛选

  • DataFrame.loc[行条件,列条件]

    • 行筛选: 可以传递一个与行索引长度相同的 布尔列表 表示那些行留下,哪些行舍弃。例7
    • 行筛选: 可以使用布尔运算对行进行筛选。如果布尔运算的数量超过3个,建议使用 advanced indexing
    • ⚠️ 注意 :

      行的布尔运算,是通过列名完成的。以 df[列名] 的方式表达。 例8

      多个条件,可以用 &,| 表示并或,不能使用 andor例8

    • 列筛选: 不支持布尔运算。

5、Callable 筛选

  • DataFrame.loc[Callable]

    可以使用 Callable 进行筛选,原理上这也是一种布尔筛选。 例9

相关方法:

➡️ 相关方法


  • DataFrame.at

    Access a single value for a row/column label pair.

  • DataFrame.iloc

    筛选数据-自然索引法

  • DataFrame.xs

    Returns a cross-section (row(s) or column(s)) from the Series/DataFrame.

  • Series.loc

    Access group of values using labels.

示例:

测试文件下载:

本文所涉及的测试文件,如有需要,可在文章顶部的绑定资源处下载。

若发现文件无法下载,应该是资源包有内容更新,正在审核,请稍后再试。或站内私信作者索要。

read_excel_na_values
测试文件下载位置.png


例1:只有单层索引的DataFrame,筛选单条数据

  • 1、筛选1行,默认返回 Series,把筛选条件套上 [ ],可以强制返回 DataFrame
import pandas as pd

# 构建DF
df = pd.DataFrame([[1, 2], [4, 5], [7, 8]],
     index=['cobra', 'viper', 'sidewinder'],
     columns=['max_speed', 'shield'])

# 常规单行筛选,返回Series
df.loc['cobra']
# ... max_speed    1
# ... shield       2
# ... Name: cobra, dtype: int64


# 单行筛选,条件套上[ ],强制返回 DataFrame
df.loc[['cobra']]
# ...        max_speed  shield
# ... cobra          1       2
  • 2、筛选1列,默认返回 Series,把筛选条件套上 [ ],可以强制返回 DataFrame
# 常规单列筛选'max_speed',返回Series
df.loc[:,'max_speed']
# ... cobra         1
# ... viper         4
# ... sidewinder    7
# ... Name: max_speed, dtype: int64


# 单列筛选,条件套上[ ],强制返回 DataFrame
df.loc[:,['max_speed']]
# ...	        max_speed
# ... cobra	1
# ... viper	4
# ... sidewinder	7
  • 3、筛选单元格,默认返回标量值 Scalar,把筛选条件套上 [ ],可以强制返回 DataFrame
# 常规单元格筛选,返回标量值
df.loc['cobra', 'max_speed']
# ... 1


# 把筛选条件套上 [ ],可以强制返回 DataFrame
df.loc[['cobra'], ['max_speed']]
# ... 	    max_speed
# ... cobra	    1


例2:多层索引的DataFrame,筛选数据

  • 1、构建演示数据并观察数据内容
import pandas as pd

# 构建演示数据
tuples = [
   ('射手', '巨魔族'), ('射手', '死灵族'),
   ('法师', '巨魔族'), ('法师', '死灵族'),
   ('战士', '巨魔族'), ('战士', '死灵族')
]
index = pd.MultiIndex.from_tuples(tuples)
values = [[9, 20], [10, 18], [7, 23],
        [6, 25], [4, 30], [3, 35]]
df = pd.DataFrame(values, columns=[['属性1','属性2'], ['攻速','攻击力']], index=index)

# 观察数据内容
df
  • 2、筛选1行或1列顶层索引,正常传递条件即可
# 筛选顶层行索引
df.loc['射手']
# ...        属性1	 属性2
# ...        攻速	攻击力
# ... 巨魔族	    9	   20
# ... 死灵族	   10	   18

# 筛选顶层列索引
df.loc[:,'属性1']
# ... 		        攻速
# ... 射手	巨魔族	   9
# ...       死灵族	  10
# ... 法师	巨魔族	   7
# ...       死灵族	   6
# ... 战士	巨魔族	   4
# ...       死灵族	   3
  • 2、筛选非顶层索引、列名,需要用元组把条件套起来
# 筛选最底层的某行
df.loc[('射手','巨魔族')]
# ... 属性1  攻速      9
# ... 属性2  攻击力    20
# ... Name: (射手, 巨魔族), dtype: int64

# 筛选底层索引,顶层列名
df.loc[('射手','巨魔族'),'属性1']
# ... 攻速    9
# ... Name: (射手, 巨魔族), dtype: int64

# 筛选底层索引,底层列名
df.loc[('射手','巨魔族'),('属性1','攻速')]
# ... 9
9
  • 3、多层索引筛选,条件用 [] 套起来,也可以强制返回DataFrame
df.loc[[('射手','巨魔族')],['属性1']]
# ... 		       属性1
# ...              攻速
# ... 射手	巨魔族	 9


例3:单层索引的DataFrame,筛选多条数据

import pandas as pd

# 构建DF
df = pd.DataFrame([[1, 2], [4, 5], [7, 8]],
     index=['cobra', 'viper', 'sidewinder'],
     columns=['max_speed', 'shield'])

# 筛选多行
df.loc[['cobra', 'viper']]
# ... 	    max_speed	shield
# ... cobra	        1	     2
# ... viper	        4	     5


# 筛选多行、单列
df.loc[['cobra', 'viper'],'max_speed']
# ... cobra    1
# ... viper    4
# ... Name: max_speed, dtype: int64


# 筛选多行、多列
df.loc[['cobra', 'viper'],['max_speed', 'shield']]
# ... 	     max_speed	shield
# ... cobra	         1	     2
# ... viper	         4	     5


例4:多层索引的DataFrame,筛选多条数据

import pandas as pd

# 构建演示数据
tuples = [
   ('射手', '巨魔族'), ('射手', '死灵族'),
   ('法师', '巨魔族'), ('法师', '死灵族'),
   ('战士', '巨魔族'), ('战士', '死灵族')
]
index = pd.MultiIndex.from_tuples(tuples)
values = [[9, 20], [10, 18], [7, 23],
        [6, 25], [4, 30], [3, 35]]
df = pd.DataFrame(values, columns=[['属性1','属性2'], ['攻速','攻击力']], index=index)



# 筛选多个顶层行索引
df.loc[['射手','法师']]
# ... 	            属性1	属性2
# ...               攻速	攻击力
# ... 射手	巨魔族	   9	   20
# ...       死灵族	  10	   18
# ... 法师	巨魔族	   7	   23
# ...       死灵族	   6	   25


# 筛选多个底层航索引
df.loc[[('射手','巨魔族'),('法师','死灵族')]]
# ... 		       属性1	属性2
# ...               攻速	攻击力
# ... 射手	巨魔族	   9	   20
# ... 法师	死灵族	   6	   25


# 行、列组合条件
df.loc[('射手','巨魔族'),('属性2','攻击力')]
# ... 20

# 同时筛选多行、多列
df.loc[[('射手','巨魔族'),('法师','死灵族')],[('属性1','攻速'),('属性2','攻击力')]]
# ... 	           属性1	属性2
# ...              攻速	   攻击力
# ... 射手	巨魔族	  9	      20
# ... 法师	死灵族	  6	      25


例5:单层索引的DataFrame,筛选行范围

import pandas as pd

# 构建DF
df = pd.DataFrame([[1, 2], [4, 5], [7, 8]],
     index=['cobra', 'viper', 'sidewinder'],
     columns=['max_speed', 'shield'])


# 只筛选行的范围
df.loc['viper':'sidewinder']
# ...  	        max_speed	shield
# ... viper	            4	     5
# ... sidewinder	    7	     8


# 行范围 + 1列
df.loc['viper':'sidewinder','shield']
# ... viper         5
# ... sidewinder    8
# ... Name: shield, dtype: int64


# 行范围 + 多列
df.loc['viper':'sidewinder',['max_speed','shield']]
# ... 	          max_speed	shield
# ... viper	              4	     5
# ... sidewinder	      7	     8


例6:多层索引的DataFrame,筛选行范围 起始范围,必须精确到最底层的索引或列名。

import pandas as pd

# 构建演示数据
tuples = [
   ('射手', '巨魔族'), ('射手', '死灵族'),
   ('战士', '巨魔族'), ('战士', '死灵族'),
   ('法师', '巨魔族'), ('法师', '死灵族')
]
index = pd.MultiIndex.from_tuples(tuples)
values = [[9, 20], [10, 18], [7, 23],
        [6, 25], [4, 30], [3, 35]]
df = pd.DataFrame(values, columns=[['属性1','属性2'], ['攻速','攻击力']], index=index)

# 观察数据
# df
#                属性1	属性2
#                攻速	攻击力
# 射手	巨魔族	    9	   20
#       死灵族	   10	   18
# 战士	巨魔族	    4	   30
#       死灵族	    3	   35
# 法师	巨魔族	    7	   23
#       死灵族	    6	   25


# 筛选从射手到法师,即使都是顶层索引,范围条件的开始位置,也必须精确到巨魔族,意为指定这一行。因为顶层索引、列名,可能代表着多行或多列,这是不能作为开始条件使用的。
df.loc[('射手','巨魔族'):'战士']
#                属性1	属性2
#                攻速	攻击力
# 射手	巨魔族	    9	   20
#       死灵族	   10	   18
# 战士	巨魔族	    4	   30
#       死灵族	    3	   35

# 筛选行范围 + 列范围
df.loc[('射手','巨魔族'):('战士', '巨魔族'),('属性1','攻速'):('属性2', '攻击力')]
#                属性1	属性2
#                攻速	攻击力
# 射手	巨魔族	    9	   20
#       死灵族	   10	   18
# 战士	巨魔族	    4	   30


示例7:传递布尔列表,表示哪些行留下

import pandas as pd

# 构建演示数据
df = pd.DataFrame([[1, 2], [4, 5], [7, 8]],
     index=['cobra', 'viper', 'sidewinder'],
     columns=['max_speed', 'shield'])

# 布尔列表
list_bool = [False, False, True]

# 传入布尔列表,只保留第3行'sidewinder'
df.loc[list_bool]
# ...             max_speed	shield
# ... sidewinder	      7	     8


示例8:用布尔运算筛选行

import pandas as pd

# 构建演示数据
df = pd.DataFrame([[1, 2], [4, 5], [7, 8]],
     index=['cobra', 'viper', 'sidewinder'],
     columns=['移速', '护甲'])

# 筛选 '移速列' > 6 的行
df.loc[df['移速'] > 6]
# ... 	          移速	护甲
# ... sidewinder	7	  8


# 筛选 '移速列' > 6 的行,同时,只保留护甲列
df.loc[df['移速'] > 6,['护甲']]  # 护甲加了方括号,是为了以DataFrame显示。
# ... 	          护甲
# ... sidewinder	8


# 用  & 表示 并
df.loc[(df['移速'] > 1) & (df['护甲'] < 8)]
# ... 	    移速  护甲
# ... viper	  4	    5


# 用 | 表示 或
df.loc[(df['移速'] > 4) | (df['护甲'] < 5)]
# ...            移速	护甲
# ... cobra	       1	  2
# ... sidewinder   7	  8


示例9:使用 Callable 进行筛选

  • 1、lambda
import pandas as pd

# 构建演示数据
df = pd.DataFrame([[1, 2], [4, 5], [7, 8]],
     index=['cobra', 'viper', 'sidewinder'],
     columns=['移速', '护甲'])

# 使用lambda 筛选 护甲列 ==8 的行
df.loc[lambda df: df['护甲'] == 8]

# ...       	  移速	护甲
# ... sidewinder	7	  8
  • 2、自定义函数
import pandas as pd

# 构建演示数据
df = pd.DataFrame([[1, 2], [4, 5], [7, 8]],
     index=['cobra', 'viper', 'sidewinder'],
     columns=['移速', '护甲'])

# 定义筛选函数
def slect_df(df):
    return df['护甲'] == 8


# 调用函数
df.loc[slect_df]


示例10:筛选后赋值,更改数据内容

import pandas as pd

# 构建演示数据
df = pd.DataFrame([[1, 2], [4, 5], [7, 8]],
     index=['cobra', 'viper', 'sidewinder'],
     columns=['移速', '护甲'])

# 筛选后,批量修改数据
df.loc[df['移速']>2] = 50
df
# ...             移速	护甲
# ... cobra	         1	  2
# ... viper	        50	  50
# ... sidewinder	50	  50


# 筛选后,批量 + 30
df.loc[df['移速'] == 50] += 5
df
# ...             移速	护甲
# ... cobra	         1	  2
# ... viper	        55	  55
# ... sidewinder	55	  55

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

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

相关文章

京东年度数据报告-2023全年度笔记本十大热门品牌销量(销额)榜单

2023年度&#xff0c;在电脑办公市场整体销售下滑的环境下&#xff0c;笔记本市场的整体销售也不景气。 根据鲸参谋平台的数据显示&#xff0c;京东平台上笔记本的年度销量为650万&#xff0c;同比下滑约16%&#xff1b;销售额约为330亿&#xff0c;同比下滑约19%。同时&#…

【网络取证篇】Windows终端无法使用ping命令解决方法

【网络取证篇】Windows终端无法使用ping命令解决方法 以Ping命令为例&#xff0c;最近遇到ping命令无法使用的情况&#xff0c;很多情况都是操作系统"环境变量"被改变或没有正确配置导致—【蘇小沐】 目录 1、实验环境&#xff08;一&#xff09;无法ping命令 &a…

MS-DETR: Efficient DETR Training with Mixed Supervision论文学习笔记

论文地址&#xff1a;https://arxiv.org/pdf/2401.03989.pdf 代码地址&#xff08;中稿后开源&#xff09;&#xff1a;GitHub - Atten4Vis/MS-DETR: The official implementation for "MS-DETR: Efficient DETR Training with Mixed Supervision" 摘要 DETR 通过迭代…

LeetCode 144. 94. 145. 二叉树的前序,中序,后续遍历(详解) ੭ ᐕ)੭*⁾⁾

经过前面的二叉树的学习&#xff0c;现在让我们实操来练练手~如果对二叉树还不熟悉的小伙伴可以看看我的这篇博客~数据结构——二叉树&#xff08;先序、中序、后序及层次四种遍历&#xff08;C语言版&#xff09;&#xff09;超详细~ (✧∇✧) Q_Q-CSDN博客 144.二叉树的前序遍…

java+vue基于Spring Boot的渔船出海及海货统计系统

该渔船出海及海货统计系统采用B/S架构、前后端分离进行设计&#xff0c;并采用java语言以及springboot框架进行开发。该系统主要设计并完成了管理过程中的用户注册登录、个人信息修改、用户信息、渔船信息、渔船航班、海货价格、渔船海货、非法举报、渔船黑名单等功能。该系统操…

vulnhub靶场之DC-9

一.环境搭建 1.靶场描述 DC-9 is another purposely built vulnerable lab with the intent of gaining experience in the world of penetration testing. The ultimate goal of this challenge is to get root and to read the one and only flag. Linux skills and famili…

NLP论文阅读记录 - 2021 | WOS 利用 ParsBERT 和预训练 mT5 进行波斯语抽象文本摘要

文章目录 前言0、论文摘要一、Introduction1.1目标问题1.2相关的尝试1.3本文贡献 二.前提三.本文方法A. 序列到序列 ParsBERTB、mT5 四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果4.6 细粒度分析 五 总结思考 前言 Leveraging ParsBERT and Pretrained …

C++内存分配策略

目录 基础概念 内存布局 分配方式 实现 1.new和delete 2.利用空间配置器alloc 3.用malloc和free 4.静态内存分配 基础概念 在讲内存分配之前&#xff0c;先对一些基础概念进行阐述&#xff0c;以便能更好的讨论问题 内存布局 代码编译为可执行程序后运行占用的内存可…

【现代密码学】笔记5--伪随机置换(分组加密)《introduction to modern cryphtography》

【现代密码学】笔记5--伪随机置换&#xff08;分组加密&#xff09;《introduction to modern cryphtography》 写在最前面5 伪随机排列实践构造&#xff08;块密码/分组密码&#xff09; 写在最前面 主要在 哈工大密码学课程 张宇老师课件 的基础上学习记录笔记。 内容补充&…

云服务器部署Stable Diffusion Webui从0到1总结:反复重启+循环debug

文章目录 在学校服务器部署Stable Diffusion Webui&#xff08;一&#xff09;准备工作&#xff08;二&#xff09;环境配置&#xff08;三&#xff09;git拉取项目到本地&#xff08;四&#xff09;运行项目 遇到的问题&#xff1a;&#xff08;一&#xff09;使用git clone时…

jmeter--6.跨线程组关联

目录 1. 跨线程组实现接口关联 2. 跨线程组实现Cookie关联 1. 跨线程组实现接口关联 1.1 根据json/正则的方式提取到需要的响应数据 1.2 在接口下新增一个BeanShell 后置处理器&#xff0c;并通过函数助手写入【${__setProperty(new_token,${access_token},)}】&#xff0c;…

基于Java (spring-boot)的社团管理系统

一、项目介绍 系统管理员的功能概述&#xff1a; ①用户管理 a.注册用户账户 当一个新用户注册时&#xff0c;用户填写基本信息并上传。用户基本信息包括账号、 姓名、密码、手机、地址等信息。 b.用户信息管理 管理员可以查看系统所有用户的基本信息&#xff0c;并修改和…

10分钟快速上手LLM大模型Python前端开发(三)之显示模块(一)

10分钟快速上手LLM大模型Python前端开发&#xff08;三&#xff09;之显示模块&#xff08;一&#xff09; 显示代码初步测试 通用显示方法显示字符串显示dataframe显示Markdown 微信公众号&#xff1a;leetcode_algos_life&#xff0c;代码随想随记 小红书&#xff1a;4124081…

基于Java (spring-boot)的停车场管理系统

一、项目介绍 基于Java (spring-boot)的停车场管理系统、预订车位系统、停车缴费系统功能&#xff1a; 登录、注册、后台首页、用户信息管理、车辆信息管理、新增车辆、车位费用设置、停泊车辆查询、车辆进出管理、登录日志查询、个人中心、预定停车位、缴费信息。 适用人群&…

jmeter--5.断言

目录 1. 响应断言 1.1 添加断言 1.2 名词解释 断言失败显示示例 2. json断言 2.1 添加断言 2.2 名词解释 断言失败显示示例 2.3 json断言应用 3. beanshell断言 3.1 添加断言 3.2 原理 断言失败显示示例 1. 响应断言 1.1 添加断言 线程组->添加->断言->…

202406读书笔记|《沉睡的线条世界》——翻山越岭,只为与你分享点滴的快乐

《沉睡的线条世界》登登登Dn绘著&#xff0c;简简单单的小画&#xff0c;简简单单的线条&#xff0c;简简单单的语言&#xff0c;温馨又有一点暖心。 怎样的你都好&#xff0c;做最真实的自己。 部分节选如下&#xff1a; 愿你我永远有热情&#xff0c;永远能为生活的每一个小惊…

运筹说 第67期 | 动态规划模型的建立与求解

通过前一期的学习&#xff0c;我们已经学会了动态规划的基本概念和基本原理。本期小编带大家学习动态规划模型的建立与求解。 动态规划模型的建立 一 概述 建立动态规划的模型&#xff0c;就是分析问题并建立问题的动态规划基本方程。 成功地应用动态规划方法的关键&#x…

[渗透测试学习] Hospital - HackTheBox

文章目录 信息搜集getshell提权信息搜集 nmap扫描一下端口 发现8080端口和443端口有http服务 然后发现3389端口是启用了ms-wbt-server服务 在对443端口的扫描没有收获,并且只有邮箱登录界面无法注册 接着看向8080端口,我们随便注册用户登录后发现有文件上传功能 getshell …

Linux入门级常用命令学习笔记

以下命令是我跟着编程界的大佬鱼皮学习Linux时用的命令&#xff0c;我把它都记下来&#xff0c;权当作笔记&#xff0c;可供自己后期反复练习使用&#xff0c;让我们学习一下最基本的Linux命令吧。 一、Linux实战命令 在dos下 【ssh 服务器ip】可以连接服务器&#xff0c;输入…

HCIA基础知识

IP地址、静态路由、动态路由、交换机 OSPF RIP DHCP VLAN ACL NAT OSI TCP/IP UDP TCP 三次握手&#xff0c;四次挥手&#xff0c;报头 什么是网络&#xff1f; 由网络连接设备通过传输介质将网络终端设备连接起来&#xff0c;进行资源共享、信息传递的平台。 OSI七…