【Python】pandas:排序、重复值、缺省值处理、合并、分组

pandas是Python的扩展库(第三方库),为Python编程语言提供 高性能、易于使用的数据结构和数据分析工具。

pandas官方文档:User Guide — pandas 2.2.2 documentation (pydata.org)

帮助:可使用help(...)查看函数说明文档(若是第三方库的函数,需先导入库)。例如:help(pd.DataFrame),help(pd.concat)


Python代码中,导入pandas:

import pandas as pd


1、排序

(1-1)按索引排序:sort_index

sort_index(self, axis: 'Axis' = 0, level: 'Level | None' = None, ascending: 'bool | int | Sequence[bool | int]' = True, inplace: 'bool' = False, kind: 'str' = 'quicksort', na_position: 'str' = 'last', sort_remaining: 'bool' = True, ignore_index: 'bool' = False, key: 'IndexKeyFunc' = None)

注:默认axis=0 按行轴(按索引)排序,ascending=True 升序,inplace=False 不替换原DataFrame,na_position='last' NaN值在最后。

  • DataFrame.sort_index( ):按索引升序排列,默认NaN值在最后。
  • DataFrame.sort_index(ascending=False, na_position='first'):按索引降序排列,NaN值在最前面。
  • DataFrame.sort_index(key=函数):索引先传入函数操作,再按操作过的索引升序排列,默认NaN值在最后。

  • DataFrame.sort_index( ):多索引,按第一列索引升序排列。
  • DataFrame.sort_index(ascending=False):多索引,按第一列索引降序排列。
  • DataFrame.sort_index(level=指定索引列号):多索引,按指定索引列升序排列,默认其他索引也接着排序。
  • DataFrame.sort_index(level=指定索引列号, sort_remaining=False):多索引,按指定索引列升序排列,其他索引不排序。
  • DataFrame.sort_index(key=函数):索引先传入函数操作,再按操作过的索引升序排列。
  • 注:参数na_position对多索引不适用。

参数axis默认为0,按行索引排序。若axis=1,则按列索引排序。

(1-2)按数值排序:sort_values

sort_values(self, by, axis: 'Axis' = 0, ascending=True, inplace: 'bool' = False, kind: 'str' = 'quicksort', na_position: 'str' = 'last', ignore_index: 'bool' = False, key: 'ValueKeyFunc' = None)

注:默认axis=0 按行轴排序,ascending=True 升序,inplace=False 不替换原DataFrame,na_position='last' NaN值在最后。

  • DataFrame.sort_values(by=指定列 ):按指定列(多列,用列表表示)升序排列,默认NaN值在最后。
  • DataFrame.sort_values(by=指定列, ascending=False, na_position='first'):按指定列(多列,用列表表示)降序排列,NaN值在最前面。
  • DataFrame.sort_values(by=指定列, key=函数):指定列的数据先传入函数操作,再按操作过的数据升序排列,默认NaN值在最后。

参数axis默认为0,按指定列的数据排序。若axis=1,则按指定行的数据排序。

(1-3)指定列升序排序,显示前n行:nsmallest

nsmallest(self, n: 'int', columns: 'IndexLabel', keep: 'str' = 'first') -> 'DataFrame'

  • DataFrame.nsmallest(n, 指定列名):按指定列升序排列,并显示前n行。
  • DataFrame.nsmallest(n, 指定列名, keep=重复数据指定显示方式):按指定列升序排列,并显示前n行,若指定列数据相同,默认keep='first' 按数据顺序显示。若keep='last' 按数据倒序显示,若keep='all' 按顺序显示所有相同数据。
  • 注:DataFrame.nsmallest(n, 指定列名) 等同于DataFrame.sort_values(指定列名, ascending=True).head(n),但nsmallest性能更高。

若多列排序,排序列含有NaN,则NaN也会显示出来。

只能对数值列排序。

(1-4)指定列降序排序,显示前n行:nlargest

nlargest(self, n: 'int', columns: 'IndexLabel', keep: 'str' = 'first') -> 'DataFrame'

  • DataFrame.nlargest(...) 同DataFrame.nsmallest(...) 用法相同,区别是nsmallest升序排列,nlargest降序排列。
  • 注:DataFrame.nlargest(n, 指定列名) 等同于 DataFrame.sort_values(指定列名, ascending=False).head(n),但nlargest性能更高。


2、重复值

(2-1)判断重复值:duplicated

duplicated(self, subset: 'Hashable | Sequence[Hashable] | None' = None, keep: "Literal['first'] | Literal['last'] | Literal[False]" = 'first') -> 'Series'

注:默认subset=None 整行比对,keep='first' 第一次出现的数据为False 其他重复出现的为True。

  • DataFrame.duplicated( ):默认比对整行,整行相同则为重复值,默认keep='first' 除了第一次出现的为False,其他为True。
  • DataFrame.duplicated(keep='last'):默认比对整行,整行相同则为重复值,除了最后一次出现的为False,其他为True。
  • DataFrame.duplicated(keep=False):默认比对整行,整行相同则为重复值,只要是重复值就为True。
  • DataFrame.duplicated(subset=列名):比对指定列(多列,用列表形式),数据相同则为重复值,除了第一次出现的为False,其他为True。

(2-2)删除重复值:drop_duplicates,[~ ... ]

drop_duplicates(self, subset: 'Hashable | Sequence[Hashable] | None' = None, keep: "Literal['first'] | Literal['last'] | Literal[False]" = 'first', inplace: 'bool' = False, ignore_index: 'bool' = False) -> 'DataFrame | None'

注:默认subset=None 整行比对,keep='first' 保留第一次出现的数据,inplace=False 不替换原DataFrame,ignore_index=False 使用原索引标签。

  • DataFrame.drop_duplicates( ):默认比对整行,整行相同则为重复值,默认keep='first' 保留第一次出现的,其他删除。
  • DataFrame.drop_duplicates(keep='last'):默认比对整行,整行相同则为重复值,保留最后一次出现的,其他删除。
  • DataFrame.drop_duplicates(keep=False):默认比对整行,整行相同则为重复值,只要是重复值就删除。
  • DataFrame.drop_duplicates(subset=列名):比对指定列(多列,用列表形式),数据相同则为重复值,保留第一次出现的,其他删除。

DataFrame.duplicated(...),默认第一次出现的为False,其他重复出现的为True。

布尔数组作为索引将保留True的行,但实际应删除True(重复出现的)保留False(第一次出现的)。因此需取反,使用Tab键上方的~键,即DataFrame[~DataFrame.duplicated(...)]。

  • DataFrame[~DataFrame.duplicated(...)]:按duplicated的布尔结果取反删除重复值。

(2-3)统计不同的行 出现次数:value_counts

value_counts(self, subset: 'Sequence[Hashable] | None' = None, normalize: 'bool' = False, sort: 'bool' = True, ascending: 'bool' = False, dropna: 'bool' = True)

注:默认subset=None 整行比对,normalize=False 显示出现频率,sort=True 将频率排序,ascending=False 降序排列,dropna=True 忽略NaN。

  • DataFrame.value_counts( ):整行比对,显示数据出现频率,按频率降序排列,忽略NaN。
  • DataFrame.value_counts(sort=False):整行比对,显示数据出现频率,不排序(按列数据显示),忽略NaN。
  • DataFrame.value_counts(ascending=True):整行比对,显示数据出现频率,按频率升序排列,忽略NaN。
  • DataFrame.value_counts(normalize=True):整行比对,显示比例而不是频率,按比例降序排列,忽略NaN。
  • DataFrame.value_counts(subset=列名, dropna=False):指定列比对,显示数据出现频率,按频率降序排列,不忽略NaN。

(2-4)统计指定轴上 不同数据的数量:nunique

nunique(self, axis: 'Axis' = 0, dropna: 'bool' = True) -> 'Series'

注:默认axis=0 按行轴查看(即各列不同数据的数量),dropna=True 忽略NaN。

  • DataFrame.nunique( ):默认统计各列中不同数据的数量,忽略NaN。
  • DataFrame.nunique(axis=1):默认统计各行中不同数据的数量,忽略NaN。
  • DataFrame.nunique(dropna=False):统计各列中不同数据的数量,不忽略NaN。


3、缺省值处理(判断、填充、删除、替换)

缺省值:NaN(空值,非数值)。None和np.NaN都是缺省值。(np.nan和np.NaN一样都是NaN,需导入numpy,import numpy as np)

(3-1)判断缺省值:isna, isnull, notna, notnull

  • DataFrame.isna( ):判断DataFrame中数据是否是NaN,若是NaN则为True,否则为False。
  • DataFrame.isnull( ):isnull是isna的别名。
  • DataFrame.notna( ):判断DataFrame中数据是否不是NaN,若不是NaN则为True,否则为False。
  • DataFrame.notnull( ):notnull是notna的别名。
  • 注:均返回DataFrame(数据为布尔值True/False)。

(3-2)填充缺省值:

(3-2-1)指定方式填充:fillna

fillna(self, value: 'object | ArrayLike | None' = None, method: 'FillnaOptions | None' = None, axis: 'Axis | None' = None, inplace: 'bool' = False, limit=None, downcast=None) -> 'DataFrame | None'

注:默认inplace=False 不替换原DataFrame。

  • DataFrame.fillna(填充值):所有NaN值用指定填充值填充。
  • DataFrame.fillna(method=填充方式):所有NaN值用指定填充方式填充。"backfill"或"bfill"都是用NaN所在位置下一行的数据填充,"ffill"或"pad"都是用NaN所在位置上一行的数据填充。
  • DataFrame.fillna(method=填充方式, limit=填充次数, inplace=True):NaN值用指定填充方式填充指定次数,替换原DataFrame。
  • DataFrame.fillna(method=填充方式, axis=1):所有NaN值用指定填充方式填充。指定axis=1,则"backfill"或"bfill"都是用NaN所在位置下一列的数据填充,"ffill"或"pad"都是用NaN所在位置上一列的数据填充。

  • DataFrame.fillna(字典):字典中键为列名,填充值为列名对应的值。即将NaN值按照字典中相同键(列名)对应的值填充。
  • DataFrame.fillna(另一个DataFrame):将NaN值按照另一个DataFrame的相同列名相同行索引位置的值填充。

补充:

  • DataFrame.backfill( ):NaN值按该位置下一行的数据填充。若axis=1,则NaN值按该位置下一列的数据填充
  • DataFrame.bfill( ):NaN值按该位置下一行的数据填充。若axis=1,则NaN值按该位置下一列的数据填充
  • DataFrame.ffill( ):NaN值按该位置上一行的数据填充。若axis=1,则NaN值按该位置上一列的数据填充
  • DataFrame.pad( ):NaN值按该位置上一行的数据填充。若axis=1,则NaN值按该位置上一列的数据填充
  • 注:均默认inplace=False不替换原DataFrame,默认limit=None所有NaN填充。

(3-2-2)插值方式填充:interpolate

插值法:通过已知的离散的数据点,推算一定范围内新数据点的方法,常用于函数拟合。

线性关系:两个变量之间的关系用图形表示是一条直线。

线性插值法:通过连接两个已知点的直线,近似获取其他未知点的方法。

interpolate(self: 'DataFrame', method: 'str' = 'linear', axis: 'Axis' = 0, limit: 'int | None' = None, inplace: 'bool' = False, limit_direction: 'str | None' = None, limit_area: 'str | None' = None, downcast: 'str | None' = None, **kwargs) -> 'DataFrame | None'

注:默认method='linear' 线性,inplace=False 不替换原DataFrame。

  • DataFrame.interpolate( ):线性填充NaN。
  • DataFrame.interpolate(method='pad'):指定填充方法为'pad',使用NaN所在位置上一行数据填充。
  • DataFrame.interpolate(axis=1):线性填充NaN,指定列轴即横向填充。
  • DataFrame.interpolate(limit=填充个数, limit_direction=填充方向, limit_area=填充区域):线性填充NaN,指定填充个数(大于0),指定填充方向('forwar' 从前向后,'backward'从后向前,'both' 两个方向),指定填充区域('inside'有效值包围的NaN,'outside' 有效值之外的NaN)。
  • 注:多索引,只能使用默认参数method='linear'。部分指定的method(例如:'krogh','barycentric'等),需要安装scipy。

(3-3)删除缺省值所在行/列:dropna

dropna(self, axis: 'Axis' = 0, how: 'str' = 'any', thresh=None, subset: 'IndexLabel' = None, inplace: 'bool' = False)

注:默认axis=0 按行查看,how='any' 只要有NaN整行删除(不能和参数thresh一起使用),inplace=False 不替换原DataFrame。

  • DataFrame.dropna( ):只要有NaN,整行删除。
  • DataFrame.dropna(axis=1):只要有NaN,整列删除。
  • DataFrame.dropna(how='all'):整行数据都是NaN,整行删除。参数how不能和thresh一起使用。
  • DataFrame.dropna(thresh=指定非NaN值):至少有指定数量的非NaN值,该行就保留,即非NaN值少于指定数量,整行删除。参数thresh不能和how一起使用。
  • DataFrame.dropna(subset=指定列, inplace=True):查看指定列,该列数据只要有NaN整行删除,并替换原DataFrame。

(3-4)替换值:replace

replace(self, to_replace=None, value=<no_default>, inplace: 'bool' = False, limit=None, regex: 'bool' = False, method: 'str | lib.NoDefault' = <no_default>)

  • DataFrame.replace(np.nan, 新值):将NaN值替换成新值。新值可用单个数据,也可列表或字典表示。
  • DataFrame.replace(...) 除了替换NaN,可以替换其他数据,还可以用正则表达式替换值。此处忽略。
  • 注:np.nan和np.NaN一样都是NaN,需导入numpy(import numpy as np)。


4、合并

(4-1)通过索引,连接另一个DataFrame/Series的列:join

join(self, other: 'DataFrame | Series', on: 'IndexLabel | None' = None, how: 'str' = 'left', lsuffix: 'str' = '', rsuffix: 'str' = '', sort: 'bool' = False) -> 'DataFrame'

注:默认通过索引连接。默认how='left' 左连接。

  • DataFrame.join(df2, lsuffix=左列名后缀, rsuffix=右列名后缀):通过索引连接两个DataFrame的列。若列名相同,需设置左/右列名后缀。
  • DataFrame.join(df2, how=连接方式):通过索引连接两个DataFrame的列,若列名相同,需设置左/右列名后缀。默认how='left' 左连接。'right' 右连接,'inner' 内连接,'outer' 外连接,'cross' 笛卡尔积。
  • DataFrame.join(df2, on=连接列, how=连接方式):指定左DataFrame的连接列,右DataFrame需将连接列设为索引列,指定连接方式(默认左连接)。
how='left'左连接

按左DataFrame的索引,

右DataFrame没有索引对应的数据,则为NaN

how='right'右连接

按右DataFrame的索引,

左DataFrame没有索引对应的数据,则为NaN,若对应多个数据则都显示

how='inner'内连接两个DataFrame共同索引对应的数据
how='outer'外连接两个DataFrame的所有索引,各索引对应的数据,没有为NaN
how='cross'笛卡尔积X*Y,两个DataFrame的所有组合。

  •  DataFrame.join(Series):DataFrame可以通过索引连接Series。Series必须有name,且name作为列名。

(4-2)指定连接列,连接另一个DataFrame/Series的列:merge

merge(self, right: 'DataFrame | Series', how: 'str' = 'inner', on: 'IndexLabel | None' = None, left_on: 'IndexLabel | None' = None, right_on: 'IndexLabel | None' = None, left_index: 'bool' = False, right_index: 'bool' = False, sort: 'bool' = False, suffixes: 'Suffixes' = ('_x', '_y'), copy: 'bool' = True, indicator: 'bool' = False, validate: 'str | None' = None) -> 'DataFrame'

注:默认how='inner' 内连接。

  • DataFrame.merge(df2, left_on=左连接列, right_on=右连接列):分别指定两个DataFrame的连接列(列名不同),默认内连接(两DataFrame连接列都有的数据)。
  • DataFrame.merge(df2, left_on=左连接列, right_on=右连接列,how=连接方式):分别指定两个DataFrame的连接列(列名不同),指定连接方式。默认how='inner'内连接。'left'左连接,'right'右连接,'outer'外连接,'cross'笛卡尔积。
  • DataFrame.merge(df2, left_on=左连接列, right_on=右连接列,how=连接方式, indicator=True):分别指定两个DataFrame的连接列(列名不同),指定连接方式,并多一列显示是哪一边的数据。

  • DataFrame.merge(df2, on=连接列):指定两个DataFrame的连接列(列名相同),默认内连接(两DataFrame连接列都有的数据)。若只有连接列的列名相同,参数on可省略。
  • DataFrame.merge(df2, on=连接列,how=连接方式):指定两个DataFrame的连接列(列名相同),指定连接方式。默认how='inner'内连接。'left'左连接,'right'右连接,'outer'外连接,'cross'笛卡尔积。
  • DataFrame.merge(df2, on=连接列,how=连接方式, indicator=True):指定两个DataFrame的连接列(列名相同),指定连接方式,并多一列显示是哪一边的数据。

(4-3)尾部追加另一个DataFrame的行:append

append(self, other, ignore_index: 'bool' = False, verify_integrity: 'bool' = False, sort: 'bool' = False) -> 'DataFrame'

  • DataFrame.append(df2):从DataFrame尾部追加另一个DataFrame,按列名追加。默认使用原索引。
  • DataFrame.append(df2, ignore_index=True):从DataFrame尾部追加另一个DataFrame,按列名追加。忽略索引,使用从0开始的新索引。
  • 注:append未来将会被移除,建议使用pd.concat(...)。

(4-4)指定轴,连接另一个DataFrame/Series的列/行:concat

concat(objs: 'Iterable[NDFrame] | Mapping[Hashable, NDFrame]', axis: 'Axis' = 0, join: 'str' = 'outer', ignore_index: 'bool' = False, keys=None, levels=None, names=None, verify_integrity: 'bool' = False, sort: 'bool' = False, copy: 'bool' = True) -> 'DataFrame | Series'

注:默认join='outer' 外连接。

  • pd.concat(列表形式):使用列表形式表示需连接的对象。默认DataFrame按列名从尾部追加另一个DataFrame,默认使用原索引。
  • pd.concat(列表形式, ignore_index=True, join=连接方式):使用列表形式表示需连接的对象。DataFrame按列名从尾部追加另一个DataFrame,指定连接方式,默认join='outer'外连接。'inner'内连接。忽略索引,则使用从0开始的新索引。
  • pd.concat(列表形式, axis=1):使用列表形式表示需连接的对象。指定列轴则DataFrame按索引横向追加另一个DataFrame,使用原列名。
  • pd.concat(列表形式, axis=1, ignore_index=True, join=连接方式):使用列表形式表示需连接的对象。指定列轴则DataFrame按索引横向追加另一个DataFrame,指定连接方式,默认join='outer'外连接。'inner'内连接。忽略索引,则使用从0开始的新列名。


5、分组:groupby

groupby(self, by=None, axis: 'Axis' = 0, level: 'Level | None' = None, as_index: 'bool' = True, sort: 'bool' = True, group_keys: 'bool' = True, squeeze: 'bool | lib.NoDefault' = <no_default>, observed: 'bool' = False, dropna: 'bool' = True) -> 'DataFrameGroupBy'

注:默认dropna=True 忽略NaN。

  •  DataFrame.groupby(指定列):按指定列分组。默认忽略NaN。按多个列分组,可用列表形式表示。
  • 分组后进行聚合,若不指定列聚合,则只对数值型的列聚合。
  • 分组后类型为DataFrameGroupBy。DataFrameGroupBy官方文档:GroupBy — pandas 2.2.2 documentation (pydata.org)

groupby一般和agg配合使用。agg在指定轴上使用多个操作进行聚合。

agg(self, func=None, axis: 'Axis' = 0, *args, **kwargs) 

 groupby可根据条件分组。


pandas 各函数官方文档:General functions — pandas 2.2.2 documentation (pydata.org)

DataFrame 各方法官方文档:DataFrame — pandas 2.2.2 documentation (pydata.org)

Series 各方法官方文档:Series — pandas 2.2.2 documentation (pydata.org)

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MyBatis入门如何使用操作数据库及常见错误(yml配置)

一&#xff0c;什么是MyBatis 是一款优秀的持久层框架&#xff0c;用于简化jdbc的开发 持久层&#xff1a;指的就是持久化操作的层&#xff0c;通常也就是数据访问层&#xff08;dao&#xff09;&#xff0c;也就是用来操作数据库。 也就是MyBatis是让你更加简单完成程序与数…

详细记录swfit微调interVL2-8B多模态大模型进行目标检测(附代码)

大模型相关目录 大模型&#xff0c;包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容 从0起步&#xff0c;扬帆起航。 RAGOnMedicalKG&#xff1a;大模型结合知识图谱的RAG实现DSPy&#xff1a;变革式大模…

PRD: Peer Rank and Discussion Improve Large Language Model based Evaluations

文章目录 题目摘要相关工作方法实验与分析指标进一步分析结论 题目 PRD&#xff1a;同行排名和讨论改善基于大型语言模型的评估 论文地址&#xff1a;https://arxiv.org/abs/2307.02762 项目地址&#xff1a;https://openreview.net/forum?idYVD1QqWRaj 摘要 如今&#xff0c…

大模型深度神经网络(Deep Neural Network, DNN)

大模型深度神经网络&#xff08;Deep Neural Network, DNN&#xff09;是一种复杂的机器学习模型&#xff0c;其特点在于包含多个隐藏层&#xff0c;从而赋予模型强大的非线性表达能力和对复杂数据模式的学习能力。以下是对大模型DNN的详细介绍&#xff1a; 一、基本概念 深度…

第一阶段面试问题(前半部分)

1. 进程和线程的概念、区别以及什么时候用线程、什么时候用进程&#xff1f; &#xff08;1&#xff09;线程 线程是CPU任务调度的最小单元、是一个轻量级的进程 &#xff08;2&#xff09;进程 进程是操作系统资源分配的最小单元 进程是一个程序动态执行的过程&#xff0c;包…

MATLAB(6)水纹碰撞覆盖地形

前言 在MATLAB中模拟水纹&#xff08;如水波&#xff09;碰撞并覆盖地形的效果涉及到几个复杂的步骤&#xff0c;包括地形的生成、水波的模拟&#xff08;通常使用波动方程&#xff09;以及两者的交互。下面我将给出一个简化的示例&#xff0c;展示如何在MATLAB中创建一个基本的…

文献综述过程如何有助于综合各种来源的信息

VersaBot生成文献综述 文献综述过程在通过几个关键机制综合各种来源的信息方面发挥着至关重要的作用&#xff1b; 1. 批判性评估和比较&#xff1a; 你不能简单地单独总结每个来源&#xff1b;你积极地比较和对比他们的发现、方法和理论观点。这可以帮助您识别每个来源的共性…

安卓项目结构与日志工具

文章目录 安卓的项目结构app目录下的结构安卓的日志工具 安卓的项目结构 首先需要切换称Project模式。 .gradle和.idea &#xff1a;这两个目录下放置的都是Android Studio自动生成的一些文件&#xff0c;我们无须关心&#xff0c;也不用编辑。 app &#xff1a;项目中的代码、…

齿轮表面缺陷检测方案

齿轮是一种机械传动元件&#xff0c;通常由具有齿条的圆盘或圆柱体组成&#xff0c;用于传递动力和运动。齿轮通过齿与齿之间的啮合&#xff0c;将动力从一个轴传递到另一个轴&#xff0c;实现速度和扭矩的传递。齿轮通常用于机械设备、车辆传动系统和各种工业机械中。 齿轮通…

【网络世界】传输层协议

&#x1f308;前言&#x1f308; 欢迎收看本期【网络世界】&#xff0c;本期内容讲解TCP/IP协议栈中的传输层协议&#xff0c;即UDP协议和TCP协议。包含了他们的协议格式&#xff0c;特点等。介绍他们的应用场景&#xff0c;最后对比TCP与UDP协议。此外&#xff0c;还将介绍套接…

电商 API 接口的最佳实践与案例分析

在当今数字化的商业世界中&#xff0c;电商平台的发展日新月异&#xff0c;而 API 接口在其中扮演着至关重要的角色。通过合理地利用电商 API 接口&#xff0c;企业能够实现更高效的运营、更优质的用户体验以及更强大的业务拓展能力。本文将深入探讨电商 API 接口的最佳实践&am…

换根dp学习总结3

我也不想搞这么多&#xff0c;但是这东西真的太难了&#xff0c;因为我还是个蒟蒻。算了蒟蒻继续写这次的总结了 寻找全图最远路径问题——Computer ——题目来源于hdu2196 题意&#xff1a;题目就是说会输入多组数据&#xff0c;每组数据给你一个n&#xff0c;表示结点的总数…

SEO优化之a标签rel属性的使用

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storm…

每日一题 ~乘积最大子数组

. - 力扣&#xff08;LeetCode&#xff09;. - 备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/maximum-product-subarray/description/ 题目分析 题目要求找出给定整…

基于SpringBoot+Vue的热门网游推荐网站(带1w+文档)

基于SpringBootVue的热门网游推荐网站(带1w文档) 基于SpringBootVue的热门网游推荐网站(带1w文档) 本系统选用B/S结构开发&#xff0c;它是一个提供可以对热门网游推荐进行信息管理的系统&#xff0c;用户可以在该系统获取最新动态&#xff0c;可以结识更多的朋友&#xff0c;产…

基于级联深度学习算法在双参数MRI中检测前列腺病变的评估| 文献速递-AI辅助的放射影像疾病诊断

Title 题目 Evaluation of a Cascaded Deep Learning–based Algorithm for Prostate Lesion Detection at Biparametric MRI 基于级联深度学习算法在双参数MRI中检测前列腺病变的评估 Background 背景 Multiparametric MRI (mpMRI) improves prostate cancer (PCa) dete…

SDK 多版本管理控制利器 SDKMAN 介绍及使用

一、SDKMAN 假如你同时参与了一个使用JDK 8的项目和一个采用JDK 17特性的项目。每次在两个项目之间切换时&#xff0c;你都面临着版本冲突的问题。如果有那么一个工具类似于 Python 中的 anaconda 工具&#xff0c;可以帮助你管理不同版本的 SDK &#xff0c;是不是非常有用&a…

八股文无用?也许是计算机大学生的重要人生指南!

大家所说的"八股文"其实指的是那些固定、标准化的面试问题和答案&#xff0c;通常涉及特定的知识点和技术概念。 博主本人也是一枚大学生&#xff0c;个人也记背过相关的八股文&#xff0c;比如计算机网络里的TCP和UDP的区别、TCP三次握手和四次挥手的具体过程等等&a…

汽车电子KL15,KLR,KL30等术语解释

KL作为术语&#xff0c;是德语’klemme’的缩写&#xff0c;代表连接器或连接 缩略词解释KL15汽车电源的RUN模式KL50汽车电源的Crank模式KLR汽车电源的ACC模式KL30汽车蓄电池的正极&#xff0c;始终保持带电状态KL31汽车蓄电池的负极&#xff0c;持续与车辆接地连接KL4048V汽车…

遇到Websocket就不会测了?别慌,学会这个Jmeter插件轻松解决....

websocket 是一种双向通信协议&#xff0c;在建立连接后&#xff0c;websocket服务端和客户端都能主动向对方发送或者接收数据&#xff0c;而在http协议中&#xff0c;一个request只能有一个response&#xff0c;而且这个response也是被动的&#xff0c;不能主动发起。 websoc…