pandas入门

Pandas

Pandas中只有列 或者 二维表, 没有行的数据结构(即使是行的数据, 也会通过列的方式展示).

Series:Series和Python中的列表非常相似,但是它的每个元素的数据类型必须相同

DataFrame:可以把DataFrame看作由Series对象组成的字典,其中key是列名,值是Series

一、series

1、创建Series对象

(一)、概述

Series也是Pandas中的最基本的数据结构对象,下文中简称s对象;是DataFrame的列对象或者行对象,series本身也具有行索引

Series是一种类似于一维数组的对象,由下面两个部分组成:

  • values:一组数据(numpy.ndarray类型)

  • index:相关的数据行索引标签;如果没有为数据指定索引,于是会自动创建一个0到N-1(N为数据的长度)的整数型索引

(二)、实操

格式

Series(列表/元组/字典)

例如

# 方式1: 把 Numpy的 ndarray 转为 Series
# 1. 创建numpy的ndarray对象.
arr = np.array([1, 2, 3, 4, 5])
print(type(arr))  # <class 'numpy.ndarray'># 2. 把上述的 ndarray => Series
s1 = pd.Series(arr)
print(f's1的内容: {s1}')
print(f's1的类型: {type(s1)}')  # <class 'pandas.core.series.Series'># 演示 元组 => Series对象
s3 = pd.Series((10, 20, 30))
print(f's3的内容: {s3}')
print(f's3的类型: {type(s3)}')  # <class 'pandas.core.series.Series'># 演示 字典 => Series对象
s4 = pd.Series({'A': 1, 'B': 2, 'C': 3})
print(f's4的内容: {s4}')
print(f's4的类型: {type(s4)}')  # <class 'pandas.core.series.Series'># 创建Series对象的时候, 加入: 索引. 
s5 = pd.Series([10, 20, 30], index=['x', 'y', 'z'])
print(f's5的内容: {s5}')
print(f's5的类型: {type(s5)}')  # <class 'pandas.core.series.Series'>

2、常用属性

格式

loc[]		# 索引列
iloc[]		# 行号
shape		# 维度,(行, 列)
size 		# 元素个数
dtype		# 元素类型
dtypes		# 效果同上
index		# 获得所有的索引列,也就是列名
keys()		# 效果同上
values		# 获取所有的值

例如

# 1. 读取文件数据, 获取DF对象.
df = pd.read_csv('./data/nobel_prizes.csv', index_col='id')
# 2. 打印数据的前5条数据.
df.head()       # 默认获取前5条数据.# 2. 从df对象获取第一行数据, 充当Series对象.
# 方式1: 根据 索引列 获取.
first_row = df.loc[941]
print(first_row)
print(type(first_row))  # <class 'pandas.core.series.Series'># 方式2: 根据 行号 来获取.
first_row = df.iloc[0]
print(first_row)
print(type(first_row))  # <class 'pandas.core.series.Series'># 3. 演示Series的属性
print(first_row.shape)      # (7,),   维度
print(first_row.size)       # 7, 元素个数
print(first_row.dtype)      # Series的元素类型, object => 字符串
print(first_row.dtypes)     # 效果同上.# 扩展: 演示 int 和 str的 "dtype"属性
print(first_row['year'])        # 从Series对象中, 获取: year列的值. 
print(first_row['year'].dtype)  # 从Series对象中, 获取: year列的值 的 数据类型: int64
# print(first_row['category'].dtype)  # 从Series对象中, 获取: category列的值 的 数据类型. 报错, 因为字符串没有dtype属性.# index: 获取所有的 索引列(即: 列名)
print(first_row.index)
print(first_row.keys())  # 效果同上, 即: key()函数 效果 和 index属性效果 有一致.# values: 获取所有的 值
print(first_row.values)

3、常用方法

格式

len()	  # 获取长度
head()    # 获取前5条数据
head(n=2) # 获取前2条数据
tail()    # 获取后5条数据
tail(n=3) # 获取后3条数据keys()    # 获取所有的列名
tolist()  # Series => list列表
to_list() # 效果同上
to_frame()# Series => DataFrame对象.drop_duplicates() # 去重, 返回 => Series对象
unique()          # 去重, 返回 => list列表sort_values()                 # 根据值排序, 默认: 升序, ascending = True
sort_values(ascending=False)  # 根据值排序, ascending=False => 降序
sort_index(ascending=False)   # 根据索引排序 mean()		# 平均值
max()		# 最大值
min()		# 最小值
sum()		# 求和
count()		# 统计该列的 非空值的个数
std()		# 标准差value_counts()	# 类似于SQL语句: select 性别, count(id) from 表名 group by 性别;
describe()		# 查看列的详细信息

例如

# 1. 创建Series对象.
s1 = pd.Series(data=[1, 2, 3, 4, 2, 3], index=['A', 'B', 'C', 'D', 'E', 'F'])
print(s1)# 2. 演示Series对象的常用方法.
print(len(s1))      # 获取长度, 6
print(s1.head())    # 获取前5条数据
print(s1.head(n=2)) # 获取前2条数据
'''
6
A    1
B    2
C    3
D    4
E    2
dtype: int64
A    1
B    2
dtype: int64
'''print(s1.tail())    # 获取后5条数据
print(s1.tail(n=3)) # 获取后3条数据
'''
B    2
C    3
D    4
E    2
F    3
dtype: int64
D    4
E    2
F    3
dtype: int64
'''print(s1.keys())    # 获取所有的列名
'''
Index(['A', 'B', 'C', 'D', 'E', 'F'], dtype='object')
'''print(s1.tolist())  # Series => list列表
print(s1.to_list()) # 效果同上
print(s1.to_frame())# Series => DataFrame对象.
'''
[1, 2, 3, 4, 2, 3]
[1, 2, 3, 4, 2, 3]0
A  1
B  2
C  3
D  4
E  2
F  3
'''print(s1.drop_duplicates()) # 去重, 返回 => Series对象
print(s1.unique())          # 去重, 返回 => list列表
'''
A    1
B    2
C    3
D    4
dtype: int64
[1 2 3 4]
'''print(s1.sort_values())                 # 根据值排序, 默认: 升序, ascending = True
print(s1.sort_values(ascending=False))  # 根据值排序, ascending=False => 降序
'''
A    1
B    2
E    2
C    3
F    3
D    4
dtype: int64
D    4
C    3
F    3
B    2
E    2
A    1
dtype: int64
'''print(s1.sort_index(ascending=False))   # 根据索引排序
'''
F    3
E    2
D    4
C    3
B    2
A    1
dtype: int64
'''# 平均值, 最大值, 最小值, 求和, 标准差...
print(s1.mean())        # 2.5 平均值
print(s1.max())
print(s1.min())
print(s1.sum())
print(s1.count())       # 统计该列的 非空值的个数.
print(s1.std())         # 标准差
'''
2.5
4
1
15
6
1.0488088481701516
'''# 统计每个元素的个数
print(s1.value_counts())     # 类似于SQL语句: select 性别, count(id) from 表名 group by 性别;
'''
2    2
3    2
1    1
4    1
Name: count, dtype: int64
'''# 查看Series列的详细信息.
print(s1.describe())
'''
count    6.000000
mean     2.500000
std      1.048809
min      1.000000
25%      2.000000
50%      2.500000
75%      3.000000
max      4.000000
dtype: float64
'''

4、布尔索引

格式

对象[条件]

例如

# 细节: True => 要,  False => 不要.
# 1. 读取数据, 获取df对象
df = pd.read_csv('data/scientists.csv')
df# 2. 查看每列的详细信息
df.describe()   # 统计信息
df.info()       # 详细信息# 3. 从df对象中 => 获取 Series 对象
series_age = df.Age
series_age# 4. 演示Series对象的 布尔索引
bool_list = [True, False, False, True, True, False, False, True]
print(series_age[bool_list])# 5. 筛选年龄大于平均年龄的科学家.
# 5.1 获取平均年龄
avg_mean = series_age.mean()
print(avg_mean)     # 59.125# 5.2 看看当前年龄 是否大于 平均年龄
bool_list = series_age > avg_mean
print(bool_list)        # [False, True, True, True, False, False, False, True]# 5.3 获取 年龄大于平均年龄的科学家
print(series_age[series_age > avg_mean])# 6. 上述代码优化版, 一行搞定.
# 补充: df['列名'] 和 df.列名  都可以从df中获取到指定的 列.
# print(df.Age[df.Age > df.Age.mean()])
print(df['Age'][df['Age'] > df['Age'].mean()])

5、运算

格式

+*

例如

# 场景1: Series对象 和 数值运算, 则数值会和 Series对象的每个值进行具体的运算. 
series_age + 100
series_age * 2# 场景2: Series对象 和 Series对象运算, 会优先参考 索引列运算, 即: 索引值相同的进行计算, 不同的用NAN(空值)填充.
series_age + series_ageseries_age.sort_index(ascending=False) + series_ageseries_age + pd.Series([1, 2, 3])
series_age + pd.Series([1, 2, 3], index=['a', 'b', 'c'])

二、DataFrame

1、创建DataFrame对象

(一)、概述
  • DataFrame是一个表格型的结构化数据结构,它含有一组或多组有序的列(Series),每列可以是不同的值类型(数值、字符串、布尔值等)。
  • DataFrame是Pandas中的最基本的数据结构对象,简称df;可以认为df就是一个二维数据表,这个表有行有列有索引
  • DataFrame是Pandas中最基本的数据结构,Series的许多属性和方法在DataFrame中也一样适用.
(二)、index和columns属性

格式

pandas.DataFrame(data=容器名称, columns=列名, index=行名(索引))

例如

# 1. 定义字典, 记录: 数据.
my_dict = {'id': [1, 2, 3],'name': ['乔峰', '虚竹', '段誉'],'age': [33, 29, 25]
}# 2. 把上述的字段 => DataFrame对象
# columns: 指定列的顺序.
# index: 指定 索引列的值.
df2 = pd.DataFrame(data=my_dict, columns=['name', 'id', 'age'], index=['X', 'Y', 'Z'])# 3. 打印结果.
print(df2)
print(type(df2))    # <class 'pandas.core.frame.DataFrame'>
'''name  id  age
X   乔峰   1   33
Y   虚竹   2   29
Z   段誉   3   25
<class 'pandas.core.frame.DataFrame'>
'''
(三)、实操

格式

常见的有  字典格式  和  列表套元组

例如

# 1. 定义字典, 记录: 数据.
my_dict = {'id': [1, 2, 3],'name': ['乔峰', '虚竹', '段誉'],'age': [33, 29, 25]
}# 2. 把上述的字段 => DataFrame对象
df1 = pd.DataFrame(my_dict)# 3. 打印结果.
print(df1)
print(type(df1))    # <class 'pandas.core.frame.DataFrame'>
'''id name  age
0   1   乔峰   33
1   2   虚竹   29
2   3   段誉   25
<class 'pandas.core.frame.DataFrame'>
'''# 1. 定义列表, 记录: 数据.
my_list = [(1, '乔峰', 33),(2, '虚竹', 29),(3, '段誉', 25)
]# 2. 把上述的字段 => DataFrame对象
# columns: 指定列的顺序.
# index: 指定 索引列的值.
df3 = pd.DataFrame(data=my_list, columns=['id', 'name', 'age'], index=['X', 'Y', 'Z'])# 3. 打印结果.
print(df3)
print(type(df3))    # <class 'pandas.core.frame.DataFrame'>
'''id name  age
X   1   乔峰   33
Y   2   虚竹   29
Z   3   段誉   25
<class 'pandas.core.frame.DataFrame'>
'''

2、常用属性

格式

df对象.shape		# 数组的维度
df对象.size		# 元素个数	
df对象.values		# df元素对象->ndarray形式
df对象.dtypes		# 各列元素的类型
df对象.ndim		# 数组的秩,也就是数组的维度数量或者轴的数量
df对象.index		# 获得所有的索引列的值
df对象.columns	# 获得所有的列名

例如

# 1. 读取文件, 获取df对象.
df = pd.read_csv('data/scientists.csv')# 2. 演示df对象常用属性
print(df.shape)  # 维度: (8, 5)
print(df.size)  # 元素个数: 行数 * 列数, 40
print(df.values)  # DF对象 => ndarray形式
print(type(df.values))  # <class 'numpy.ndarray'>
print(df.dtypes)  # (各列)的元素类型
print(df.ndim)  # 维度, 2
print(df.index)  # 获取所有的 索引列(的值)
print(df.columns)  # 获取所有的列名

3、常用方法

格式

len(df对象)			# 行数
对象.head()			# 默认前5行
对象.head(n=2)		# 前2行
对象.tail()			# 默认后5行
对象.tail(n=2)		# 后2行
对象.info() 			# 查看各列的基本信息
对象.describe()		# 查看各列的统计信息(默认只显示数值列),包括: 平均值, 方差, 最大值, 最小值等
对象.describe(include='all')	# 查看各列的统计信息, 所有列
对象.describe(exclude=['int', 'float'])	# 查看各列的统计信息, 不包含int, float类型的列
对象.count()			# 查看各列非空值的总数
对象.max()			# 查看各列的最大值
对象.min()  			# 查看各列的最小值
对象.数值列名.mean()   # 该数值列的平均值

例如

# 演示df对象的常用方法
print(len(df))  # 8, 行数
print(df.head())  # 默认是前5行
print(df.head(n=2))  # 前2行
print(df.tail())  # 默认是后5行
print(df.tail(n=2))  # 后2行print(df.info())  # 查看各列的基本信息, 包括: 列名, 列元素个数, 列元素类型
print(df.describe())  # 查看各列的统计信息(默认只显示 数值列相关), 包括: 平均值, 方差, 最大值, 最小值等
print(df.describe(include='all'))  # 查看各列的统计信息, 所有列. 
print(df.describe(exclude=['int', 'float']))  # # 查看各列的统计信息, 不包含int, float类型的列print(df.count())  # 查看各列的非空值总数
print(df.max())  # 查看各列的最大值
print(df.min())  # 查看各列的最小值
# print(df.mean())     # 查看数值列的平均值, 针对于旧版本Anaconda(例如: 2020版)有效. 新版本不支持.
print(df.Age.mean())

4、索引

格式

# 布尔索引
df[df.数值列名 > df.数值列名.mean()]  # df对象的布尔值操作.
df.列名[df.列名 > df.列名.mean()]  # Series对象的布尔值操作.

例如

# 需求: 过滤出df对象中, Age列大于平均年龄的数据行
df[df.Age > df.Age.mean()]  # df对象的布尔值操作.
df.Age[df.Age > df.Age.mean()]  # Series对象的布尔值操作.

5、运算

格式

+*

例如

# 1. 和数值运算的时候, 数值会和df对象的每个值进行计算.
# 2. 和新的df计算的时候, 会优先参考索引, 对应索引进行计算, 不匹配就返回NAN.# 场景1: df 和 数值计算.
df * 2# 场景2: df 和 df计算
df + dfdf + df[:4]  # 类似于Python的切片, 即: 获取前4行, 索引为: 0 ~ 4 包左不包右

三、更改Series和DataFrame对象

1、设置和取消索引列

格式

pandas.read_csv(文件路径, index_col=目标列名)df对象.set_index(目标列的列名, inplace=True)	# inplace=True时在原df对象上直接修改,反之inplace=False时生成新的df对象,默认时False
df对象.reset_index(inplace=True)				# 将当前索引变成普通列,自动补充索引列

例如

# 场景1: 读取数据, 不设置索引列, 读取数据完毕后, 设置索引列. 
# 1. 读取数据, 获取df对象.
movie = pd.read_csv('data/movie.csv')
movie.head()# 2. 设置 movie_title列为索引列
movie.set_index('movie_title', inplace=True)  # inplace=True => 在原df对象上直接修改.# 3. 查看设置后的内容.
movie.head()# 场景2: 读取数据时, 直接设置索引列.
movie = pd.read_csv('data/movie.csv', index_col='movie_title')
movie.head()# 场景3: 重置索引列.
movie.reset_index(inplace=True)
movie.head()

2、修改行名和列名

格式

# 方案一
rename()# 方案二
读取所有的行名,列名,再利用索引更改行/列名字

例如

# 方案一
# 1. 读取数据, 获取df对象
df = pd.read_csv('data/movie.csv', index_col='movie_title')
df.head()
# 2. 手动修改行名(索引列) 和 列名
# 索引列
idx_name = {'Avatar': '阿凡达', "Pirates of the Caribbean: At World's End": '加勒比海盗'}
# 列名
col_name = {'color': '颜色', 'director_name': '导演名'}
# 3. 通过 rename()函数, 修改 行名 和 列名
df.rename(index=idx_name, columns=col_name, inplace=True)
# 4. 查看修改后的结果.
df.head()# 方案二
# 1. 读取数据, 获取df对象
df = pd.read_csv('data/movie.csv', index_col='movie_title')
df.head()
# 2. 获取所有的 行名(索引列值) 和 列名
idx_list = df.index.to_list()
col_list = df.columns.tolist()
# 3. 修改 列名 和 行名
# 索引列
idx_list[0] = '阿凡达'
idx_list[1] = '加勒比海盗'
# 列名
col_list[0] = '颜色'
col_list[1] = '导演名'
# 4. 把修改后的 行名 和 列名, 设置为新的: 索引列 和 列名即可.
df.index = idx_list
df.columns = col_list
# 5. 查看修改后的结果.
df.head()

3、添加列

格式

df对象[添加的列名] = 值
df对象.loc[索引] = 值
pandas.concat([df对象, new_row], ignore_index=True)	# 将新行添加到原始df对象

例如

# 1. 读取数据, 获取df对象
df = pd.read_csv('data/movie.csv')
df.head()# 2. 添加列.  格式:  df对象[列名] = 值
# 是否看过这个电影, 0 => 没看过, 1 => 看过
df['has_seen'] = 1# 添加1列, 表示电影总的 脸书点赞数, 总点赞数 = 导演的脸书点赞数 + 演员的点赞数
df['director_actor_all_facebook_likes'] = df['director_facebook_likes'] + df['actor_1_facebook_likes'] + df['actor_2_facebook_likes'] + df['actor_3_facebook_likes']# 3. 查看添加后的内容.
df.head()

4、删除列

格式

df对象.drop(列名/列索引/行号/行索引)

例如

# 1. 演示删除列
# df.drop('has_seen', inplace=True, axis='columns')
# df.drop('imdb_score', inplace=True, axis='columns')
# df.head().drop(['Avatar', "Pirates of the Caribbean: At World's End"])
df.head().drop([0, 1])      # 根据 索引列值 删除该行.
# 2. 查看处理后的结果.
df.head()

5、插入列

格式

df对象.insert(loc=索引值, column=列名, value=)

例如

# 1. 在索引为1的地方插入1列, 总利润 = 总收入 - 总预算
df.insert(loc=1, column='profix', value=df['gross'] - df['budget'])     # insert() 是直接在原对象上修改
# 2. 查看处理后的结果.
df.head()

四、导入和导出数据

1、导出数据

格式

df对象.to_pickle(路径)						# pickle文件 一般用于存储 pandas的 中间结果
df对象.to_csv(路径, index=False, sep='\t')	# 将文件导入到csv或者tsv中;index为True是导出索引列,反之不导出,默认导出;sep为分隔符
df对象.to_excel(路径, index=False,sheet_name=名字) # 将文件导入到excel中;index为True是导出索引列,反之不导出,默认导出;sheet_name为表名

例如

# 1. 读取文件, 获取df对象.
df = pd.read_csv('data/scientists.csv')# 2. 演示导出数据到文件中.  
# 要求: 导出文件到 当前项目下的 output 文件夹下.   
# 导出的格式: df.to_文件格式()# 前提: output文件夹必须存在.
df.to_pickle('output/scientists.pickle')        # pickle文件 一般用于存储 pandas的 中间结果. 
df.to_csv('output/scientists.csv')              # 细节: 索引列也会导出
df.to_csv('output/scientists_noindex.csv', index=False)   # 细节: 不导出索引列
df.to_csv('output/scientists_noindex.tsv', index=False, sep='\t')   # sep: 分隔符df.to_excel('output/scientists.xlsx')
df.to_excel('output/scientists_noindex.xlsx', index=False, sheet_name='test')
print('导出成功!')

2、导入数据

格式

df对象.read_pickle(地址)
df对象.read_csv(地址)
df对象.read_excel(地址)

例如

# 1. 读取文件, 获取df对象
df = pd.read_pickle('output/scientists.pickle')df = pd.read_csv('output/scientists.csv')
df = pd.read_csv('output/scientists_noindex.csv')
df = pd.read_csv('output/scientists_noindex.tsv', sep='\t') # 读取tsv的时候, 指定分隔符df = pd.read_excel('output/scientists.xlsx')# 如果不写表名, 则默认读取第1个表, 如果写了, 则读取指定的表. 可以是一张表, 也可以是多张表.
# 1张表的情况下, 返回的是: df对象.
# 多张表的情况下, 返回的是: 字典, 即: 表名做键, 该表的df对象做值.
df = pd.read_excel('output/scientists_noindex.xlsx', sheet_name=['test1', 'test2'])
df					# 字典
df['test1']			# df对象

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

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

相关文章

列表、数组排序总结:Collections.sort()、list.sort()、list.stream().sorted()、Arrays.sort()

列表类型 一.Collections.sort() Collections.sort()用于List类型的排序&#xff0c;其提供了两个重载方法&#xff1a; 1.sort(List<T> list) &#xff08;1&#xff09;List指定泛型时只能指定引用数据类型&#xff0c;也就是说无法用于基本数据类型的排序。 &am…

Matlab R2024B软件安装教程

一、新版本特点 MATLAB R2024B版本带来了众多新特性和改进&#xff0c;旨在提升用户的内容创作体验和工程效率。以下是该版本的一些主要特点&#xff1a; 1. 性能提升和优化&#xff1a;R2024B版本在性能上进行了显著优化&#xff0c;无论是在提问、回答问题、发布新技巧还是…

el-table 的单元格 + 图表 + 排序

<el-table border :data"tableDataThree" height"370px" style"width: 100%"><el-table-column :key"activeName 8" width"50" type"index" label"序号" align"center"></el…

JS实现树形结构数据中特定节点及其子节点显示属性设置的技巧(可用于树形节点过滤筛选)

大家好&#xff0c;今天我要分享的是如何在树形结构的数据中&#xff0c;根据特定条件设置节点及其所有子节点的显示属性。在实际项目中&#xff0c;这种需求非常常见&#xff0c;特别是在需要动态展示和隐藏节点的情况下。下面我将通过一个具体的示例来讲解实现过程。 需求分析…

【网络安全 | 靶机搭建】解决虚拟机联网问题(NAT模式)

背景:在电脑上下载并使用VMware虚拟机后,重装VMware时可能会遇到虚拟机无法联网的问题(例如,ping www.baidu.com 无法通畅)。这种情况可能是网络适配器被删除导致的。 本文将通过添加网络、安装网络适配器以及切换网络连接方式等步骤解决虚拟机的联网问题,具体步骤如下:…

Android Retrofit源码分析(一):Retrofit是什么?和OkHttp的区别是什么?为什么需要他?

目录 一、Retrofit是什么? Retrofit是一个基于OKHttp的RESTful网络请求框架,由Square公司开源,专为Android和Java提供类型安全的HTTP客户端。它可以理解为OKHttp的加强版,底层封装了OKHttp,主要负责网络请求接口的封装,使得网络请求工作更加简洁高效。 简单来说,Retro…

ElementUI 布局——行与列的灵活运用

ElementUI 布局——行与列的灵活运用 一 . 使用 Layout 组件1.1 注册路由1.2 使用 Layout 组件 二 . 行属性2.1 栅格的间隔2.2 自定义元素标签 三 . 列属性3.1 列的偏移3.2 列的移动 在现代网页设计中&#xff0c;布局是构建用户界面的基石。Element UI 框架通过其强大的 <e…

0x08 MotionEye 视频监控组件 list 信息泄漏洞 CVE-2022-25568

参考&#xff1a; MotionEye 视频监控组件 list 信息泄漏洞 CVE-2022-25568 | PeiQi文库 (wgpsec.org) 一、漏洞描述&#xff1a; motionEye是用Python写的motion的Web前端&#xff0c;它可以监视视频信号并检测运动。它可以与多种类型的摄像机配合使用,也可以与电影文件一起…

Docker本地部署Chatbot Ollama搭建AI聊天机器人并实现远程交互

文章目录 前言1. 拉取相关的Docker镜像2. 运行Ollama 镜像3. 运行Chatbot Ollama镜像4. 本地访问5. 群晖安装Cpolar6. 配置公网地址7. 公网访问8. 固定公网地址 前言 本文主要分享如何在群晖NAS本地部署并运行一个基于大语言模型Llama 2的个人本地聊天机器人并结合内网穿透工具…

美团图床设置教程

大厂图床&#xff0c;CDN加速 项目地址&#xff1a;https://github.com/woniu336/mt-img 使用方法 在mt.php填上你的token即可&#xff0c;然后打开index.html上传图片 获取token方法 注册https://czz.meituan.com/发布视频&#xff0c;上传封面&#xff0c;注意在上传封面后…

Spring Boot利用dag加速Spring beans初始化

1.什么是Dag&#xff1f; 有向无环图(Directed Acyclic Graph)&#xff0c;简称DAG&#xff0c;是一种有向图&#xff0c;其中没有从节点出发经过若干条边后再回到该节点的路径。换句话说&#xff0c;DAG中不存在环路。这种数据结构常用于表示并解决具有依赖关系的问题。 DAG的…

深度解读MySQL意向锁的工作原理机制与应用场景

意向锁 意向锁的概念 意向锁是InnoDB自动添加的一种锁&#xff0c;不需要用户去干预。 是数据库中的一种表级锁&#xff0c;一个事务要给一个资源加锁时&#xff0c;必须要先获取到对应类型的意向锁之后&#xff0c;才可以给这个资源加上自己想要的共享锁或者排他锁&#xff0…

STM32F407单片机编程入门(十) IWDG独立看门狗详解及实战含源码

文章目录 一.概要二.独立看门狗介绍1.独立看门狗基本介绍2.独立看门狗功能描述3.独立看门狗复位时间 三.CubeMX配置一个独立看门狗IWDG例程四.CubeMX工程源代码下载五.小结 一.概要 什么是单片机看门狗 看门狗&#xff08;WDT&#xff09;是一个定时器&#xff0c;开启看门狗定…

C++ 常用设计模式

1、单例模式 一个类只有一个实例&#xff0c;提供一个全局访问点来访问这个实例。 分为懒汉模式和饿汉模式&#xff1a; 懒汉模式就是 只有用到这个实例才会初始化对象并返回 &#xff08;调用了对外的接口才实例化对象&#xff09;饿汉模式就是 不管用不用得到&#xff0c;都…

Unity3D 小案例 像素贪吃蛇 02 蛇的觅食

Unity3D 小案例 像素贪吃蛇 第二期 蛇的觅食 像素贪吃蛇 食物生成 在场景中创建一个 2D 正方形&#xff0c;调整颜色&#xff0c;添加 Tag 并修改为 Food。 然后拖拽到 Assets 文件夹中变成预制体。 创建食物管理器 FoodManager.cs&#xff0c;添加单例&#xff0c;可以设置…

【VitualBox】VitualBox的网络模式+网络配置

VirtualBox 1. 简介 VirtualBox 是一款开源虚拟机软件&#xff0c;使用者可以在VirtualBox上安装并且执行Solaris、Windows、DOS、Linux、OS/2 Warp、BSD等系统作为客户端操作系统。 2. 六种网络接入模式 VirtualBox提供了多种网络接入模式&#xff0c;他们各有优缺点&#xf…

YOLOv8改进 | 自定义数据集训练 | AirNet助力YOLOv8检测

目录 一、本文介绍 二、AirNet原理介绍 2.1 对比基降解编码器&#xff08;CBDE&#xff09; 2.2 降解引导修复网络&#xff08;DGRN&#xff09; 三、yolov8与AirNet结合修改教程 3.1 核心代码文件的创建与添加 3.1.1 AirNet.py文件添加 3.1.2 __init__.py文件添加 3…

【qt】一个WPS项目了解qt界面设计的基本套路

项目功能演示: 放心食用!最后有完整代码. 超级详细,期待您的一个点赞❥(^_-) 一览全局: WPS项目目录 一.创建项目二.导入资源三.ui设计四.字号选择框初始化五.滚动条初始化六.添加自定义文本类七.初始化action状态八.新建文档九.打开文件十.保存与另存为十一.打印/打印预览十…

vue 入门一

参考&#xff1a;丁丁的哔哩哔哩 1.使用vue 1.1 使用CDN的方式使用Vue mount和<div id"counter">关联起来 1.2 vue中的createApp import { createApp } from "vue"; import App from "./App.vue"; createApp(App).mount("#app&qu…

PyTorch使用------自动微分模块

目录 &#x1f354; 梯度基本计算 1.1 单标量梯度的计算 1.2 单向量梯度的计算 1.3 多标量梯度计算 1.4 多向量梯度计算 1.5 运行结果&#x1f4af; &#x1f354; 控制梯度计算 2.1 控制不计算梯度 2.2 注意: 累计梯度 2.3 梯度下降优化最优解 2.4 运行结果&#x1…