Python 之 Pandas DataFrame 数据类型的简介、创建的列操作
文章目录
- 一、DataFrame 结构简介
- 二、DataFrame 对象创建
- 1. 使用普通列表创建
- 2. 使用嵌套列表创建
- 3 指定数值元素的数据类型为 float
- 4. 字典嵌套列表创建
- 5. 添加自定义的行标签
- 6. 列表嵌套字典创建 DataFrame 对象
- 7. Series 创建 DataFrame 对象
- 三、DataFrame 列操作
- 1. 选取数据列
- 2. 列添加
- 3. insert() 方法添加
- 4. 删除数据列
- DataFrame 是 Pandas 的重要数据结构之一,也是在使用 Pandas 进行数据分析过程中最常用的结构之一,可以这么说,掌握了 DataFrame 的用法,你就拥有了学习数据分析的基本能力。
一、DataFrame 结构简介
- DataFrame 是一个表格型的数据结构,既有行标签(index),又有列标签(columns),它也被称异构数据表。
- 所谓异构,指的是表格中每列的数据类型可以不同,比如可以是字符串、整型或者浮点型等。其结构图示意图,如下所示:
- 表格中展示了某个销售团队个人信息和绩效评级(rating)的相关数据。数据以行和列形式来表示,其中每一列表示一个属性,而每一行表示一个条目的信息。
- 下表展示了上述表格中每一列标签所描述数据的数据类型,如下所示:
- DataFrame 的每一列数据都可以看成一个 Series 结构,只不过,DataFrame 为每列数据值增加了一个列标签。
- 因此 DataFrame 其实是从 Series 的基础上演变而来,并且他们有相同的标签,在数据分析任务中 DataFrame 的应用非常广泛,因为它描述数据的更为清晰、直观。
- 通过示例对 DataFrame 结构做进一步讲解。 下面展示了一张学生评分表,如下所示:
- 同 Series 一样,DataFrame 自带行标签索引,默认为隐式索引即从 0 开始依次递增,行标签与 DataFrame 中的数据项一一对应。上述表格的行标签从 0 到 3,共记录了 4 条数据(图中将行标签省略)。当然你也可以用“显式索引”的方式来设置行标签。
- 下面对 DataFrame 数据结构的特点做简单地总结,如下所示:
- (1) DataFrame 每一列的标签值允许使用不同的数据类型。
- (2) DataFrame 是表格型的数据结构,具有行和列。
- (3) DataFrame 中的每个数据值都可以被修改。
- (4) DataFrame 结构的行数、列数允许增加或者删除。
- (5) DataFrame 有两个方向的标签轴,分别是行标签和列标签。
- (6) DataFrame 可以对行和列执行算术运算。
二、DataFrame 对象创建
- Pandas DataFrame 是一个二维的数组结构,类似二维数组。
- DataFrame 的语法模板如下:
pandas.DataFrame(data=None, index=None, columns=None, dtype=None, copy=None)
其参数含义如下:
- data 表示输入的数据,可以是 ndarray,series,list,dict,标量以及一个 DataFrame。
- index 表示行标签,如果没有传递 index 值,则默认行标签是 RangeIndex(0, 1, 2, …, n),n 代表 data 的元素个数。
- columns 表示列标签,如果没有传递 columns 值,则默认列标签是 RangeIndex(0, 1, 2, …, n)。
- dtype 表示要强制的数据类型。只允许使用一种数据类型。如果没有定义强制的数据类型,就会自行推断。
- copy 表示从输入复制数据。对于 dict 数据,copy=True,表示重新复制一份。对于 DataFrame 或 ndarray 输入,类似于 copy=False,在原数据中进行操作。
- 在开始之前,我们需要先引入 numpy 和 pandas 库。
import numpy as np
import pandas as pd
1. 使用普通列表创建
- 使用 DataFrame 数据结构进行输出。
- 在这里我们并没有设置 index 和 columns,因此,他们就默认从 0 开始。
- DataFrame 不会输出数据类型。
data = [1,2,3,4,5]
df = pd.DataFrame(data)
print(df)
# 0
#0 1
#1 2
#2 3
#3 4
#4 5
- 使用 Series 数据结构进行输出。
- Series 会输出对应的数据类型。
data = [1,2,3,4,5]
df = pd.Series(data)
print(df)
#0 1
#1 2
#2 3
#3 4
#4 5
#dtype: int64
2. 使用嵌套列表创建
- 列表中每个元素代表一行数据,如果我们不分配列标签,他们会默认从 0 开始进行计数。
data = [['xiaowang',20],['Lily',30],['Anne',40]]
df = pd.DataFrame(data)
print(df)
# 0 1
#0 xiaowang 20
#1 Lily 30
#2 Anne 40
- 当我们分配列标签时,会按我们分配的进行输出。
- 这里需要注意的是,我们分配的列标签必须和列数对应。
data = [['xiaowang',20],['Lily',30],['Anne',40]]
df = pd.DataFrame(data,columns=['Name','Age'])
print(df)
# Name Age
#0 xiaowang 20
#1 Lily 30
#2 Anne 40
3 指定数值元素的数据类型为 float
- 需要注意的是,dtype 只能设置一个,设置多个列的数据类型,需要使用其他方式。
- 当我们分配列标签时,满足我们设定的数据类型会自动使用,不满足则会自动识别。
data = [['xiaowang', 20, "男", 5000],['Lily', 30, "男", 8000],['Anne', 40, "女", 10000]]
df = pd.DataFrame(data,columns=['Name','Age',"gender", "salary"], dtype=int)
print(df)
print(df['salary'].dtype)
# Name Age gender salary
#0 xiaowang 20 男 5000
#1 Lily 30 男 8000
#2 Anne 40 女 10000
#float64
4. 字典嵌套列表创建
- data 字典中,键对应的值的元素长度必须相同(也就是列表长度相同)。
- 如果传递了索引,那么索引的长度应该等于数组的长度;如果没有传递索引,那么默认情况下,索引将是 RangeIndex(0.1…n),其中 n 代表数组长度。
- 这里我们需要注意的时,字典在 python 3.7 以后是有顺序的。
- 例如,我们通过字典创建 DataFrame,输出行标签和列标签。
data = {'Name':['关羽', '刘备', '张飞', '曹操'],'Age':[28,34,29,42]}
df = pd.DataFrame(data)
print(df)
print(df.index)
print(df.columns)
# Name Age
#0 关羽 28
#1 刘备 34
#2 张飞 29
#3 曹操 42
#RangeIndex(start=0, stop=4, step=1)
#Index(['Name', 'Age'], dtype='object')
- 注意:这里使用了默认行标签,也就是 RangeIndex(0.1…n)。它生成了 0,1,2,3,并分别对应了列表中的每个元素值。
5. 添加自定义的行标签
- 通过字典嵌套列表创建 DataFrame ,并定义我们的行标签,最后输出行标签和列标签。
data = {'Name':['关羽', '刘备', '张飞', '曹操'],'Age':[28,34,29,42]}
index = ["rank1", "rank2", "rank3", "rank4"]
df = pd.DataFrame(data, index=index)
print(df)
print(df.index)
print(df.columns)
# Name Age
#rank1 关羽 28
#rank2 刘备 34
#rank3 张飞 29
#rank4 曹操 42
#Index(['rank1', 'rank2', 'rank3', 'rank4'], dtype='object')
#Index(['Name', 'Age'], dtype='object')
6. 列表嵌套字典创建 DataFrame 对象
- 列表嵌套字典可以作为输入数据传递给 DataFrame 构造函数。默认情况下,字典的键被用作列名。
data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]
df = pd.DataFrame(data, index=['first', 'second'])
print(df)
# a b c
#first 1 2 NaN
#second 5 10 20.0
- 注意,如果其中某个元素值缺失,也就是字典的 key 无法找到对应的 value,将使用 NaN 代替。
- 如何使用列表嵌套字典创建一个 DataFrame 对象,可以设置结果需要那些列。
data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]
df1 = pd.DataFrame(data, index=['first', 'second'], columns=['a', 'b'])
df2 = pd.DataFrame(data, index=['first', 'second'], columns=['a', 'b1'])
print("===========df1============")
print(df1)
print("===========df2============")
print(df2)
#===========df1============
# a b
#first 1 2
#second 5 10
#===========df2============
# a b1
#first 1 NaN
#second 5 NaN
7. Series 创建 DataFrame 对象
- 也可以传递一个字典形式的 Series,从而创建一个 DataFrame 对象,其输出结果的行索引是所有 index 的合集。
d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d)
print(df)
type(np.NaN)
# one two
#a 1.0 1
#b 2.0 2
#c 3.0 3
#d NaN 4
#float
- 注意:对于 one 列而言,此处虽然显示了行索引 ‘d’,但由于没有与其对应的值,所以它的值为 NaN。
- 当我们需要解决不同列的数据类型时,可以使用设置自定义数据类型。
data = {"Name":pd.Series(['xiaowang', 'Lily', 'Anne']),"Age":pd.Series([20, 30, 40], dtype=float),"gender":pd.Series(["男", "男", "女"]),"salary":pd.Series([5000, 8000, 10000], dtype=float)
}
df = pd.DataFrame(data)
df
# Name Age gender salary
#0 xiaowang 20.0 男 5000.0
#1 Lily 30.0 男 8000.0
#2 Anne 40.0 女 10000.0
三、DataFrame 列操作
- DataFrame 可以使用列标签来完成数据的选取、添加和删除操作。下面依次对这些操作进行介绍。
1. 选取数据列
- 可以使用列索引,轻松实现数据选取。
- 我们通过字典创建 DataFrame,定义行标签,单独选取每一列并输出。
data = {'Name':['关羽', '刘备', '张飞', '曹操'],'Age':[28,34,29,42]}
index = ["rank1", "rank2", "rank3", "rank4"]
df = pd.DataFrame(data, index=index)
print(df)
print("=========df['Name']:取得Name列===============")
print(df['Name'])
print("=========df['Age']:取得Age列===============")
print(df['Age'])
# Name Age
#rank1 关羽 28
#rank2 刘备 34
#rank3 张飞 29
#rank4 曹操 42
#=========df['Name']:取得Name列===============
#rank1 关羽
#rank2 刘备
#rank3 张飞
#rank4 曹操
#Name: Name, dtype: object
#=========df['Age']:取得Age列===============
#rank1 28
#rank2 34
#rank3 29
#rank4 42
#Name: Age, dtype: int64
- 我们也可以同时选取很多列。
print("=========df[['Name', 'Age']]:df选取多列===============")
print(df[['Name', 'Age']])
#=========df[['Name', 'Age']]:df选取多列===============
# Name Age
#rank1 关羽 28
#rank2 刘备 34
#rank3 张飞 29
#rank4 曹操 42
- 这里需要注意的是,列不是能使用切片选取多列。
print("=========df不能使用切片选取多列===============")
print(df['Name': 'Age'])
#=========df不能使用切片选取多列===============
#Empty DataFrame
#Columns: [Name, Age]
#Index: []
- 如果我直接通过标签位置去获取列,会报错。
df[1]
2. 列添加
- 使用 columns 列索引标签可以实现添加新的数据列,示例如下。
- 首先,我们创建初始数据。
d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d)
print(df)
# one two
#a 1.0 1
#b 2.0 2
#c 3.0 3
#d NaN 4
- 然后使用 df[‘列’]= 值,插入新的数据列。
print ("====通过Series添加一个新的列====:")
df['three']=pd.Series([10,20,30],index=['a','b','c'])
print(df)
#====通过Series添加一个新的列====:
# one two three
#a 1.0 1 10.0
#b 2.0 2 20.0
#c 3.0 3 30.0
#d NaN 4 NaN
- 我们也可以将已经存在的数据列相加运算,从而创建一个新的列。
print ("======将已经存在的数据列相加运算,从而创建一个新的列:=======")
df['four']=df['one']+df['three']
print(df)
#======将已经存在的数据列相加运算,从而创建一个新的列:=======
# one two three four
#a 1.0 1 10.0 11.0
#b 2.0 2 20.0 22.0
#c 3.0 3 30.0 33.0
#d NaN 4 NaN NaN
- 如果我们新添加的列当中出现新的行标签,就不会显示出来。
df['error']=pd.Series([10,20,30],index=['b','a','s3'])
print(df)
# one two three four error
#a 1.0 1 10.0 11.0 20.0
#b 2.0 2 20.0 22.0 10.0
#c 3.0 3 30.0 33.0 NaN
#d NaN 4 NaN NaN NaN
3. insert() 方法添加
- 在上述示例中,我们初次使用了 DataFrame 的算术运算,这和 NumPy 非常相似。
- 除了使用 df[]=value 的方式外,您还可以使用 insert() 方法插入新的列,其语法模板如下:
df.insert(loc, column, value, allow_duplicates=False)
- 其参数含义如下:
- loc 表示整型,插入索引,必须验证 0<=loc<=len(列)。
- column 表示插入列的标签,类型可以是字符串、数字或者散列对象。
- value 表示数值,必须是 Series 或者数组。
- allow_duplicates 表示是否允许重复,可以有相同的列标签数据,默认为 False。
- 具体可见如下例子,我们先生成初始数据,便于后续的操作。
info=[['王杰',18],['李杰',19],['刘杰',17]]
df=pd.DataFrame(info,columns=['name','age'])
print(df)
# name age
#0 王杰 18
#1 李杰 19
#2 刘杰 17
- 这里需要注意的是,我们使用 column 参数。数值 1 代表插入到 columns 列表的索引位置。其中,loc 代表整型,插入索引,必须验证 0<=loc<=len(列)。
df.insert(1,column=‘score’,value=[91,90,75])
print("=====df.insert插入数据:=======")
print(df)
#=====df.insert插入数据:=======
# name score age
#0 王杰 91 18
#1 李杰 90 19
#2 刘杰 75 17
- 当然,我们也可以添加重复列标签数据。
df.insert(1,column='score',value=[80,70,90],allow_duplicates=True)
print(df)
# name score score age
#0 王杰 80 91 18
#1 李杰 70 90 19
#2 刘杰 90 75 17
- 此时,如果我们单独提取出列标签是 score 的列,那么,两列就都会输出。
df['score']
#score score
#0 80 91
#1 70 90
#2 90 75
- 如果我们将 allow_duplicates 参数设置为 False,然后再插入具有相同列标签的数据,就会报错。
df.insert(1,column='score',value=[80,70,90])
# 错误 cannot insert name, already exists
4. 删除数据列
- 我们通过 del 和 pop() 都能够删除 DataFrame 中的数据列,但区别是,del 没有返回值,而 pop 有返回值,具体示例如下:
- 首先,我们创建初始数据,便于后面的对比操作。
d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd']),'three' : pd.Series([10,20,30], index=['a','b','c'])}
df = pd.DataFrame(d)
print ("Our dataframe is:")
print(df)
#Our dataframe is:
# one two three
#a 1.0 1 10.0
#b 2.0 2 20.0
#c 3.0 3 30.0
#d NaN 4 NaN
- 我们使用 del 方法进行删除操作。
del df['one']
print("=======del df['one']=========")
print(df)
#=======del df['one']=========
# two three
#a 1 10.0
#b 2 20.0
#c 3 30.0
#d 4 NaN
- 我们使用 pop 方法进行删除操作。
- 由于,pop 方法可以返回我们删除的数据,因此,在一定程度上也可以用来提取数据,但是,他也会修改我们的源数据。
res_pop = df.pop('two')
print("=======df.pop('two')=========")
print(df)
print("=======res_pop = df.pop('two')=========")
print(res_pop)
#=======df.pop('two')=========
# three
#a 10.0
#b 20.0
#c 30.0
#d NaN
#=======res_pop = df.pop('two')=========
#a 1
#b 2
#c 3
#d 4
#Name: two, dtype: int64
相关文章:

Python 之 Pandas DataFrame 数据类型的简介、创建的列操作
文章目录一、DataFrame 结构简介二、DataFrame 对象创建1. 使用普通列表创建2. 使用嵌套列表创建3 指定数值元素的数据类型为 float4. 字典嵌套列表创建5. 添加自定义的行标签6. 列表嵌套字典创建 DataFrame 对象7. Series 创建 DataFrame 对象三、DataFrame 列操作1. 选取数据…...
华为OD机试真题Python实现【5键键盘的输出】真题+解题思路+代码(20222023)
🔥系列专栏 华为OD机试(Python)真题目录汇总华为OD机试(JAVA)真题目录汇总华为OD机试(C++)真题目录汇总华为OD机试(JavaScript)真题目录汇总文章目录 🔥系列专栏题目输入输出描述:示例1:示例2:解题思路代码实现运行结果:版权说明:题目...

IDEA全家桶式讲解 | IDEA安装、使用、断点调试、Git、插件 (第二篇)
目录 一:JavaEE阶段需要掌握的IDEA技能 1. 配置Tomcat 2. 配置Maven 3. IDEA连接数据库 4. 方便的特殊功能 5. 断点调试(重点) 6. IDEA中常用Git协同开发(重点) 7. 常用插件安装 一:JavaEE阶段需要…...

音视频基础之封装格式与音视频同步
封装格式的概念 封装格式(也叫容器)就是将已经编码压缩好的视频流、音频流及字幕按照一定的方案放到一个文件中,便于播放软件播放。 一般来说,视频文件的后缀名就是它的封装格式。 封装的格式不一样,后缀名也就不一样。 比如&a…...

外籍在读博士|赴新西兰奥克兰大学双院士导师麾下联合培养
N同学来自阿拉伯国家,但本硕博都是在我国某省属高校就读,现为材料学专业一年级博士生。联合培养首选澳洲国家,包括澳大利亚和新西兰,其次是美国,希望在2023年初出国,以完成整个学年的学习计划。在我们的帮助…...

Learning C++ No.11【string类实现】
引言: 北京时间:2023/2/19/8:48,昨天更新了有关进程状态的博客,然后在休息的时候,打开了腾讯视屏,然后看到了了一个电视剧,导致上头,从晚上6点看到了10点,把我宝贵的博客…...

实力见“证”:Tapdata 技术创新与发展潜力广受认可
Tapdata 积极拥抱各种“不确定”,变中求新,只为呈现出更加好用的产品。 而 Tapdata 在专业领域不断深耕,持续打磨产品能力的同时,也收获了诸多来自外界的肯定,从用户到投资人,从生态伙伴到技术媒体以及官方…...

【C++修炼之路】18.map和set
每一个不曾起舞的日子都是对生命的辜负 map和setmap和set一.关联式容器二.set2.1 set的介绍2.2 set的使用1.set的模板参数列表2.set的构造3.set的迭代器4.set修改操作5.bound函数三.multiset四.map3.1 map的介绍3.2 map的使用1.map的模板参数说明2.pair的介绍3.map的[]重载五.m…...

ChatGPT原理与技术演进剖析
—— 要抓住一个风口,你得先了解这个风口的内核究竟是什么。本文作者:黄佳 (著有《零基础学机器学习》《数据分析咖哥十话》) ChatGPT相关文章已经铺天盖地,剖析(现阶段或者只能说揣测)其底层原…...

Retrofit+Hilt后端请求小项目1--项目介绍
简介 本项目根据 youtube 对应教程实现而来 将会对对应代码以及依赖(如 Hilt、retrofit、coil)进行详细的分析与解读,同时缕清项目结构安排 如文章有叙述不清晰的,请直接查看原教程:https://www.youtube.com/watch?…...

实际项目角度优化App性能
前言:前年替公司实现了一个在线检疫App,接下来一年时不时收到该App的需求功能迭代,部分线下问题跟进。随着新冠疫情防控政策放开,该项目也是下线了。 从技术角度来看,有自己的独特技术处理特点。下面我想记录一下该App…...

Structure|Alphafold2在肽结构预测任务上的基准实验
题目:Benchmarking AlphaFold2 on peptide structureprediction 文献来源:2023, Structure 31, 1–9 代码:基准实验,比较了比较多的模型 1.背景介绍 由2-50个氨基酸构成的聚合物可以称为肽。但是关于肽和蛋白质之间的差异还是…...
Simple XML
简介 官网:https://simple.sourceforge.net/home.php Github:https://github.com/ngallagher/simplexml Simple 是用于 Java 的高性能 XML 序列化和配置框架。它的目标是提供一个 XML 框架,使 XML 配置和通信系统的快速开发成为可能。该框架…...

在代码质量和工作效率的矛盾间如何取舍?
这个问题的答案是,在很短的一段时期,编写高质量代码似乎会拖慢我们的进度。与按照头脑中首先闪现的念头编写代码相比,高质量的代码需要更多的思考和努力。但如果我们编写的不仅仅是运行一次就抛之脑后的小程序,而是更有实质性的软…...

rabbitMq安装(小短文)--未完成
rabbitMq是在activeMq的基础上创造的,有前者的功能,比前者强,属于后来居上。系统环境:windows10首先下载相关软件Erlang,因为他是这个语言写的。https://www.erlang.org/downloads然后安装,并且弄到环境变量里验证是否…...

Python调用MMDetection实现AI抠图去背景
这篇文章的内容是以 《使用MMDetection进行目标检测、实例和全景分割》 为基础,需要安装好 MMDetection 的运行环境,同时完成目标检测、实例分割和全景分割的功能实践,之后再看下面的内容。 想要实现AI抠图去背景的需求,我们需要…...

Java代码使用最小二乘法实现线性回归预测
最小二乘法简介最小二乘法是一种在误差估计、不确定度、系统辨识及预测、预报等数据处理诸多学科领域得到广泛应用的数学工具。它通过最小化误差(真实目标对象与拟合目标对象的差)的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数…...

linux-rockchip-音频相关
一、查看当前配置声卡状态 cat /proc/asound/cards二、查看当前声卡工作状态 声卡分两种通道,一种是Capture、一种是Playback。Capture是输入通道,Playback是输出通道。例如pcm0p属于声卡输出通道,pcm0c属于声卡输入通道。 ls /proc/asoun…...

Android Handler的内存抖动以及子线程创建Handler
一、介绍 Handler,作为一个在主线程存活的消息分发工具,在App开发过程使用频率很高,也是面试问的比较多的。 面试常见的比如:子线程如何创建?Handler的机制是什么?内存抖动等,接下来我们会针对H…...

机器学习算法原理之k近邻 / KNN
文章目录k近邻 / KNN主要思想模型要素距离度量分类决策规则kd树主要思想kd树的构建kd树的搜索总结归纳k近邻 / KNN 主要思想 假定给定一个训练数据集,其中实例标签已定,当输入新的实例时,可以根据其最近的 kkk 个训练实例的标签,…...

【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...

网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...