(6) 深入探索Python-Pandas库的核心数据结构:DataFrame全面解析
目录
- 前言
- 1. DataFrame 简介
- 2. DataFrame的特点
- 3. DataFrame的创建
- 3.1 使用字典创建DataFrame
- 3.2 使用列表的列表(或元组)创建DataFrame
- 3.3 使用NumPy数组创建DataFrame
- 3.4 使用Series构成的字典创建DataFrame
- 3.5 使用字典构成的字典创建DataFrame
- 4. 从 CSV 文件读取
- 5. DataFrame的属性和方法
- 5.1 查看 DataFrame
- 5.2 访问数据
- 5.3 修改数据
- 5.4 DataFrame 的属性
- 5.5 DataFrame 的方法
前言
大家好!我是架构筑梦的Cherry,本期跟大家分享的知识是 pandas 数据结构——DataFrame。
作者的【 Python智能工坊】专栏及【少儿编程Python:趣味编程,探索未来】正在火热更新中🔥🔥🔥,如果本文对您有帮助,欢迎大家点赞 + 评论 + 收藏 !
1. DataFrame 简介
DataFrame
是 pandas 库中最重要的数据结构之一,它用于存储和操作二维标签化的数据结构(即表格型数据)。它的强大功能、灵活性以及易用性,使其成为数据分析领域的重要工具。
在 DataFrame 中,我们可以拥有行(index
)和列(columns
),每个单元格可以包含任何数据类型(如整数、浮点数、字符串、Python 对象等)。
2. DataFrame的特点
-
二维标签化数据结构: DataFrame是一个二维表格型数据结构,具有行和列的标签,允许用户通过索引或列名方便地访问和操作数据。
-
灵活的数据类型: DataFrame中的每一列可以是不同的数据类型,如整数、浮点数、字符串、布尔值等。这使得DataFrame能够存储和处理复杂的数据集。
-
丰富的索引功能: DataFrame支持多级索引,可以通过行标签(index)和列标签(columns)进行快速的数据访问。此外,DataFrame还支持基于条件的索引,允许用户根据特定条件筛选和查询数据。
-
强大的数据处理能力: DataFrame提供了丰富的数据处理功能,包括数据排序、筛选、分组、汇总、连接等。这些功能使得用户能够轻松地对数据进行清洗、转换和分析,以满足不同的数据分析需求。
-
与其他工具的集成: DataFrame可以与许多其他工具和库(如NumPy、SciPy、Matplotlib等)进行集成,为用户提供更加全面和强大的数据处理和可视化功能。
-
易于使用和理解: DataFrame的语法和API设计得非常直观和易于理解,使得用户能够快速上手并熟练掌握其使用方法。同时,pandas库还提供了丰富的文档和示例代码,帮助用户更好地理解和应用DataFrame。
-
高性能和可扩展性: DataFrame在数据处理方面具有很高的性能,能够快速地处理大规模数据集。此外,pandas库还提供了可扩展的接口和工具,允许用户根据自己的需求进行定制和优化。
-
广泛的应用场景: DataFrame广泛应用于数据分析、数据科学、机器学习等领域。无论是在商业智能、金融分析还是科学研究方面,DataFrame都发挥着重要的作用。
3. DataFrame的创建
在pandas库中,DataFrame的创建可以通过多种方式实现,以下是几种常见且清晰的创建方法:
- 使用字典创建DataFrame
- 使用列表的列表(或元组)创建DataFrame
- 使用NumPy数组创建DataFrame
- 使用Series构成的字典创建DataFrame
- 使用字典构成的字典创建DataFrame
pd.DataFrame()是创建DataFrame的常用方法,格式如下:
pd.DataFrame(data=None, index=None, columns=None, dtype=None, copy=False)
参数说明:
- data:用于创建 DataFrame 的数据,可以是二维数组、列表的列表、字典等。
- index:指定 DataFrame 的行标签,默认为整数序列。
- columns:指定 DataFrame 的列标签,如果数据中包含列名则无需指定。
- dtype:指定 DataFrame 中列的数据类型。
- copy:是否复制输入数据,默认为 False。
以下是一些关于 DataFrame 的实例:
3.1 使用字典创建DataFrame
这是最直观和常用的创建方式之一。当已经有一组数据并且明确了每列的数据和列名时,可以使用字典来创建DataFrame。
import pandas as pd# 使用字典列表创建
data = {'A': [1, 2, 3],'B': [4, 5, 6],'C': ['p', 'q', 'r']
}
df = pd.DataFrame(data)
print(df)
输出:
A B C
0 1 4 p
1 2 5 q
2 3 6 r
3.2 使用列表的列表(或元组)创建DataFrame
当数据已经以记录方式(即每条记录是一个列表或元组)组织好,并且只需要添加列名时,可以使用此方法。
import pandas as pd# 使用列表的列表创建DataFrame
data = [['Alice', 25, 'New York'], ['Bob', 30, 'Paris'], ['Charlie', 35, 'London']]# 创建DataFrame,并指定列名
df = pd.DataFrame(data, columns=['Name', 'Age', 'City'])
print(df)
输出:
Name Age City
0 Alice 25 New York
1 Bob 30 Paris
2 Charlie 35 London
3.3 使用NumPy数组创建DataFrame
如果已经有NumPy数组,并且想将其转换为DataFrame,可以这样做。
import pandas as pd
import numpy as np# 创建NumPy数组
nums = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])# 创建DataFrame,并指定列名和索引
df = pd.DataFrame(nums, columns=['A', 'B', 'C'], index=['row1', 'row2', 'row3'])print(df)
输出:
A B C
row1 1 2 3
row2 4 5 6
row3 7 8 9
3.4 使用Series构成的字典创建DataFrame
当数据是pandas的Series对象时,也可以将其组合成字典来创建DataFrame。
import pandas as pd
import numpy as np# 创建Series对象
s1 = pd.Series([1, 2, 3], name='A')
s2 = pd.Series([4, 5, 6], name='B')# 创建DataFrame
df = pd.DataFrame({'A': s1, 'B': s2})
print(df)
输出:
A B
0 1 4
1 2 5
2 3 6
3.5 使用字典构成的字典创建DataFrame
此方法适用于数据是嵌套的字典结构,外层的字典键作为列名,内层的字典键作为行索引。
import pandas as pd# 嵌套字典数据
data = {'a': {'一': 1, '二': 2},'b': {'一': 10, '二': 20},'c': {'一': 100, '二': 200}
}# 创建DataFrame
df = pd.DataFrame(data)
print(df)
输出:
a b c
一 1 10 100
二 2 20 200
这些方法是创建DataFrame的常见方式,可以根据具体的数据结构和需求选择最适合的方法。
4. 从 CSV 文件读取
在pandas库中,从CSV(Comma Separated Values)文件读取数据以创建DataFrame是非常常见的操作。这可以通过pd.read_csv()函数来实现。以下是一些使用pd.read_csv()函数的基本示例和参数说明:
import pandas as pd# 读取CSV文件
df = pd.read_csv('file.csv')# 显示DataFrame内容
print(df)
pd.read_csv()函数有很多参数可以定制读取行为,以下是一些常用的参数:
- filepath_or_buffer:文件路径或类似文件的对象。这是必须的参数。
- sep 或 delimiter:字段分隔符,默认为,。如果你的CSV文件使用其他分隔符(如制表符\t),你需要更改这个参数。
- header:用作列名的行号。默认为0(即第一行)。如果CSV文件没有标题行,可以设置为None,并使用names参数手动指定列名。
- names:如果数据不包含列标题,则可以使用此参数指定列名列表。
- index_col:用作行索引的列编号或列名。如果未指定,则使用默认的整数索引。
- usecols:返回列的子集。可以是列名的列表,也可以是列编号的列表。
- dtype:列的数据类型。可以是单个类型,也可以是为每列指定的字典。
- nrows:要读取的行数。这对于大文件特别有用,因为可以只读取前几行进行快速测试。
- skiprows:要跳过的行数(从文件开始处计算)。
- encoding:用于文件解码的字符编码。例如,‘utf-8’。
- parse_dates:尝试将数据解析为日期。可以是布尔值,表示是否尝试解析所有列,也可以是列名的列表或解析指令的列表。
- keep_default_na:如果指定了na_values参数,并且keep_default_na为False,则忽略默认的NaN值(如空字符串)。
- na_values:识别为NaN或None的附加字符串列表。
- thousands:用于解析数字的千位分隔符,如’,‘或’.'。
- skipinitialspace:跳过字段中前导的空白字符。
- comment:标记要忽略的行。任何包含此行标记的行都将被忽略。
5. DataFrame的属性和方法
5.1 查看 DataFrame
* 使用 `print(df)` 或直接在 Jupyter Notebook 中查看
* 使用 `df.head(n)` 查看前 n 行(默认为 5 行)
* 使用 `df.tail(n)` 查看后 n 行
- 示例 1: 使用 print(df) 或直接在 Jupyter Notebook 中查看
在Jupyter Notebook中,通常不需要显式调用print(df)来显示DataFrame。您只需将变量df(在这里它引用了您的DataFrame)作为一个独立的表达式或作为最后一行写入一个代码单元格,然后运行该单元格。Jupyter Notebook将自动显示df的内容。
import pandas as pd# 假设我们有一个名为'example.csv'的CSV文件
df = pd.read_csv('example.csv')# 在Jupyter Notebook中,只需运行以下行(无需print)
df
注意:如果您在标准的Python脚本或交互式环境中工作,则需要使用print(df)来显示DataFrame的内容。
- 示例 2: 使用 df.head(n) 查看前 n 行(默认为 5 行)
df.head(n)函数允许您查看DataFrame的前n行。如果未指定n,则默认显示前5行。
import pandas as pd# 假设我们有一个名为'example.csv'的CSV文件
df = pd.read_csv('example.csv')# 显示前5行(默认)
print(df.head())# 显示前10行
print(df.head(10))
- 示例 3: 使用 df.tail(n) 查看后 n 行
类似地,df.tail(n)函数允许您查看DataFrame的最后n行。如果未指定n,则默认显示最后5行。
import pandas as pd# 假设我们有一个名为'example.csv'的CSV文件
df = pd.read_csv('example.csv')# 显示最后5行(默认)
print(df.tail())# 显示最后10行
print(df.tail(10))
5.2 访问数据
* 通过列名访问整列数据:`df['A']`
* 通过位置访问列:`df.iloc[:, 0]` (等价于 `df['A']` 但基于位置)
* 通过标签访问列:`df.loc[:, 'A']` (也等价于 `df['A']` 但基于标签)
* 访问单个元素:`df.at[row_label, 'A']` 或 `df.iat[row_position, 0]`
* 访问多行多列:使用切片或布尔索引
- 示例1:通过列名访问整列数据
# 假设我们有一个DataFrame df,它有一个名为'A'的列
col_a = df['A']
- 示例2:通过位置访问列
# 使用iloc基于整数位置索引访问第一列(位置为0的列)
# 注意这不一定等同于df['A'],除非'A'确实是第一列
col_by_position = df.iloc[:, 0]
- 示例3:通过标签访问列
# 使用loc基于标签索引访问名为'A'的列
# 这与df['A']等效
col_by_label = df.loc[:, 'A']
- 示例4:访问单个元素
有两种主要方式访问单个元素:
使用.at[]基于标签:
# 假设我们想要访问标签为'row_label'的行和名为'A'的列中的元素
element_at = df.at['row_label', 'A']
使用.iat[]基于整数位置:
# 假设我们想要访问第一行(位置为0)和第一列(位置为0)中的元素
# 注意这通常不会直接对应于'A'列,除非'A'是第一列,且'row_label'是第一行的标签
element_iat = df.iat[0, 0]
# 但如果你知道'A'是第n列,可以这样访问:
n = df.columns.get_loc('A') # 获取'A'列的整数位置
row_position = 0 # 假设要访问第一行
element_specific_iat = df.iat[row_position, n]
- 示例5:访问多行多列
– 使用切片
# 访问前两行和前两列(基于位置)
subset_by_slice = df.iloc[:2, :2]# 访问名为'A'和'B'的列(基于标签)
subset_by_slice_label = df.loc[:, ['A', 'B']]
– 使用布尔索引
# 假设我们有一个条件来选择某些行(例如,'A'列的值大于10)
mask = df['A'] > 10
# 选择满足条件的行和所有列
subset_by_condition = df[mask]# 或者,选择满足条件的行和特定的列(例如,'B'和'C'列)
subset_by_condition_and_columns = df.loc[mask, ['B', 'C']]
5.3 修改数据
* 直接修改列的值:`df['A'] = [10, 20, 30]`
* 添加新列:`df['D'] = [100, 200, 300]`
* 删除列:`del df['A']` 或 `df = df.drop(columns=['A'])`
* 删除行:`df = df.drop(index=[0, 1])` (注意这会改变原始的 index)
- 示例1:直接修改列的值
import pandas as pd# 创建一个简单的 DataFrame
data = {'A': [1, 2, 3],'B': [4, 5, 6],'C': [7, 8, 9]
}
df = pd.DataFrame(data)df['A'] = [10, 20, 30]
print("\n修改列 'A' 后的 DataFrame:")
print(df)
输出:
A B C
0 10 4 7
1 20 5 8
2 30 6 9
- 示例2:添加新列
df['D'] = [100, 200, 300]
print("\n添加新列 'D' 后的 DataFrame:")
print(df)
输出:
A B C D
0 10 4 7 100
1 20 5 8 200
2 30 6 9 300
- 示例3:删除列
del df['A']
print("\n使用 del 删除列 'A' 后的 DataFrame:")
print(df)
输出:
B C D
0 4 7 100
1 5 8 200
2 6 9 300
- 示例4:使用 drop 方法
df = df.drop(columns=['B'])
print("\n使用 drop 方法删除列 'B' 后的 DataFrame:")
print(df)
输出:
C D
0 7 100
1 8 200
2 9 300
- 示例5:删除行
df = df.drop(index=[0, 1])
print("\n删除索引为 0 和 1 的行后的 DataFrame:")
print(df)
输出:
C D
2 9 300
注意:在删除行或列后,原始的 index 可能会被改变(取决于你是否重置了 index)。如果你希望保留原始的 index 值(即使行被删除),你可能需要使用 reset_index 方法并设置 drop=True 来避免旧的 index 成为 DataFrame 的一部分。
5.4 DataFrame 的属性
* `df.shape`:返回 DataFrame 的形状(行数,列数)
* `df.dtypes`:返回每列的数据类型
* `df.index`:返回行标签
* `df.columns`:返回列标签
* `df.values`:返回 DataFrame 的 ndarray 表示
- 示例:
import pandas as pd# 创建一个简单的 DataFrame
data = {'A': [1, 2, 3],'B': [4.0, 5.0, 6.0],'C': ['foo', 'bar', 'baz'],'D': pd.date_range(start='2023-01-01', periods=3)
}
df = pd.DataFrame(data)# 获取 DataFrame 的形状(行数,列数)
print("Shape of DataFrame:", df.shape) # 输出:Shape of DataFrame: (3, 4)# 获取每列的数据类型
print("Data types of columns:", df.dtypes) # 输出:Data types of columns: A int64# B float64# C object# D datetime64[ns]# dtype: object# 获取行标签
print("Row labels (index):", df.index) # 输出:Row labels (index): RangeIndex(start=0, stop=3, step=1)# 获取列标签
print("Column labels:", df.columns) # 输出:Column labels: Index(['A', 'B', 'C', 'D'], dtype='object')# 获取 DataFrame 的 ndarray 表示
print("NumPy ndarray representation:", df.values)
# 输出:
# NumPy ndarray representation: [[1 4.0 'foo' Timestamp('2023-01-01 00:00:00')]
# [2 5.0 'bar' Timestamp('2023-01-02 00:00:00')]
# [3 6.0 'baz' Timestamp('2023-01-03 00:00:00')]]
5.5 DataFrame 的方法
* `df.describe()`:提供 DataFrame 的统计摘要
* `df.sort_values(by='column_name')`:按指定列的值排序
* `df.groupby('column_name')`:按指定列的值进行分组
* `df.merge(other_df, on='column_name')`:基于指定列合并两个 DataFrame
* `df.pivot(index='column1', columns='column2', values='column3')`:将数据重塑为表格格式
当然,以下是您给出的 pandas DataFrame 操作的示例:
- 示例1:df.describe() :提供 DataFrame 的统计摘要
import pandas as pd# 创建一个简单的 DataFrame
data = {'A': [1, 2, 3, 4, 5],'B': [10, 20, 30, 20, 15],'C': [100, 200, 50, 30, 20]
}
df = pd.DataFrame(data)# 提供 DataFrame 的统计摘要
print(df.describe())
输出:
A B C
count 5.000000 5.000000 5.000000
mean 3.000000 19.000000 80.000000
std 1.581139 7.416198 73.824115
min 1.000000 10.000000 20.000000
25% 2.000000 15.000000 30.000000
50% 3.000000 20.000000 50.000000
75% 4.000000 20.000000 100.000000
max 5.000000 30.000000 200.000000
这将输出每列的基本统计信息,如计数、均值、标准差、最小值、25%分位数、中位数、75%分位数和最大值。
- 示例2:df.sort_values(by=‘column_name’):按指定列的值排序
# 按列 'B' 的值排序
sorted_df = df.sort_values(by='B')
print(sorted_df)
这将按 ‘B’ 列的值对 DataFrame 进行排序。
输出:
A B C
0 1 10 100
4 5 15 20
3 4 20 30
1 2 20 200
2 3 30 50
- 示例3:df.groupby(‘column_name’):按指定列的值进行分组
# 按列 'B' 的值进行分组,并计算每组的 'A' 列的均值
grouped = df.groupby('B')['A'].mean()
print(grouped)
这将根据 ‘B’ 列的值对 DataFrame 进行分组,并计算每个组中 ‘A’ 列的均值。
输出:
B
10 1.0
15 5.0
20 3.0
30 3.0
Name: A, dtype: float64
- 示例4:df.merge(other_df, on=‘column_name’):基于指定列合并两个 DataFrame
# 创建另一个 DataFrame
other_data = {'B': [20, 15, 30, 20],'D': ['x', 'y', 'z', 'w']
}
other_df = pd.DataFrame(other_data)# 基于 'B' 列合并两个 DataFrame
merged_df = df.merge(other_df, on='B')
print(merged_df)
这将基于 ‘B’ 列的值将两个 DataFrame 合并为一个新的 DataFrame。
输出:
A B C D
0 2 20 200 x
1 2 20 200 w
2 3 30 50 z
3 4 20 30 x
4 4 20 30 w
5 5 15 20 y
- 示例5:df.pivot(index=‘column1’, columns=‘column2’, values=‘column3’):将数据重塑为表格格式
# 假设我们有一个如下的 DataFrame
pivot_data = {'year': [2020, 2020, 2021, 2021],'product': ['A', 'B', 'A', 'B'],'sales': [100, 200, 150, 300]
}
pivot_df = pd.DataFrame(pivot_data)# 使用 pivot 方法将数据重塑为表格格式
pivoted_df = pivot_df.pivot(index='year', columns='product', values='sales')
print(pivoted_df)
这将根据 ‘year’ 列的值创建行,根据 ‘product’ 列的值创建列,并将 ‘sales’ 列的值填入对应的单元格中。如果数据不能唯一地确定每个单元格的值(即存在重复的行/列组合),则 pivot
方法会抛出错误。在这种情况下,可以使用 pivot_table
方法,它允许进行聚合操作。
输出:
product A B
year
2020 100 200
2021 150 300
相关文章:

(6) 深入探索Python-Pandas库的核心数据结构:DataFrame全面解析
目录 前言1. DataFrame 简介2. DataFrame的特点3. DataFrame的创建3.1 使用字典创建DataFrame3.2 使用列表的列表(或元组)创建DataFrame3.3 使用NumPy数组创建DataFrame3.4 使用Series构成的字典创建DataFrame3.5 使用字典构成的字典创建DataFrame 4. 从…...

在 Azure 云中开始使用适用于 Ubuntu 的 Grafana
介绍 Grafana 是一款开源工具,可用于可视化和分析数据。它特别适合跟踪计算机系统的运行情况。在构建微服务或其他类型的应用程序时,您可能需要分析日志数据、轻松可视化数据或设置特殊警报以接收有关系统中发生的某些事件的通知。 这就是为什么你可能…...

1.Python学习笔记
一、环境配置 1.Python解释器 把程序员用编程语言编写的程序,翻译成计算机可以执行的机器语言 安装: 双击Python3.7.0-选择自定义安装【Customize installation】-勾选配置环境变量 如果没有勾选配置环境变量,输入python就会提示找不到命令…...

中英双语介绍百老汇著名歌剧:《猫》(Cats)和《剧院魅影》(The Phantom of the Opera)
中文版 百老汇著名歌剧 百老汇(Broadway)是世界著名的剧院区,位于美国纽约市曼哈顿。这里汇集了许多著名的音乐剧和歌剧,吸引了全球各地的观众。以下是两部百老汇的经典音乐剧:《猫》和《剧院魅影》的详细介绍。 1.…...

RpcChannel的调用过程
目录 1. RPC调用方(caller)的调用(消费)过程 2.在caller下创建文件:calluserservice.cc 3.在src的include下创建文件:mprpcchannel.h 4.在src下创建mprpcchannel.cc 1. RPC调用方(caller)的调用(消费)过…...

东芝TB6560AHQ/AFG步进电机驱动IC:解锁卓越的电机控制性能
作为一名工程师,一直在寻找可靠且高效的组件来应用于你的项目中。东芝的TB6560AHQ/AFG步进电机驱动IC能够提供精准且多功能的电机控制,完全符合现代应用的高要求,保证高性能和易用性。在这篇文章中,我们将探讨TB6560AHQ/AFG的主要…...

免杀笔记 ----> DLL注入
这段时间我们暂时没什么事情干的话我们就继续更新我们的免杀笔记力!!! :今天我们讲DLL注入 目录 1.DLL注入 2.直接加载DLL? 3.远程线程注入 获取Handle 远程申请内存空间 将我们的CS的DLL加载入内存 创建远程线…...

奇迹MU 骷髅战士在哪
BOSS分布图介绍 我为大家带来各地区怪物分布图。在游戏前期,很多玩家可能会不知道该去哪里寻找怪物,也不知道哪些怪物值得打。如果选择了太强的怪物,弱小的玩家可能会无法抵御攻击。如果选择了低等级的boss,收益可能并不理想。所…...

leetcode力扣_贪心思想
455.分发饼干(easy-自己想得出来并写好) 假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺…...

Vue中Class数据绑定
Class数据绑定 数据绑定的一个常见需求场景是操作CSS class列表,因为class是attribute(属性),我们可以和其他attribute一样使用v-bind 将它们和动态的字符串绑定。但是,在处理比较复杂的绑定时,通过拼接生…...

Python数据分析案例49——基于机器学习的垃圾邮件分类系统构建(朴素贝叶斯,支持向量机)
案例背景 trec06c是非常经典的邮件分类的数据,还是难能可贵的中文数据集。 这个数据集从一堆txt压缩包里面提取出来整理为excel文件还真不容不易,肯定要做一下文本分类。 虽然现在文本分类基本都是深度学习了,但是传统的机器学习也能做。本案…...

贪心算法-以学籍管理系统为例
1.贪心算法介绍 1.算法思路 贪心算法的基本思路是从问题的某一个初始解出发一步一步地进行,根据某个优化测度,每一 步都要确保能获得局部最优解。每一步只考虑一 个数据,其选取应该满足局部优化的条件。若下 一个数据和部分最优解连在一起…...

PyCharm 安装
PyCharm是一种流行的Python集成开发环境(IDE),由JetBrains公司开发。它提供了丰富的功能,如智能代码补全、实时错误检查、项目导航、调试工具以及版本控制等,极大地提高了Python开发人员的工作效率。以下是PyCharm安装…...

C++:对象指针访问成员函数
使用箭头操作符 (->):ptr->function() 是最常用和推荐的方式,因为它更简洁、更直观。箭头操作符 (->) 被设计为与点操作符 (.) 配合指针一起使用,以便通过指针访问对象的成员。 先解引用指针,然后使用点操作符 (.)&…...

Linux 防火墙配置指南:firewalld 端口管理应用案例(二十个实列)
🏡作者主页:点击! 🐧Linux基础知识(初学):点击! 🐧🐧Linux高级管理专栏:点击! 🔐Linux中firewalld防火墙:点击! ⏰️…...

推荐Bulk Image Downloader插件下载网页中图片链接很好用
推荐:Bulk Image Downloader chome浏览器插件下载图片链接,很好用。 有个网页,上面放了数千的gif的电路图,手工下载会累瘫了不可。想找一个工具分析它的静态链接并下载,找了很多推荐的下载工具,都是不能分…...

详解前缀码与前缀编码
前缀编码是一种数据压缩技术,也被称为可变长度编码。它的基本原理是将频繁出现的字符或字符序列用较短的编码表示,而较少出现的字符或字符序列用较长的编码表示,从而达到压缩数据的目的。 概念定义 前缀码:给定一个编码序列的集合…...

数据库管理工具 -- Navicat Premium v17.0.8 特别版
软件简介 Navicat Premium 是一款功能强大的数据库管理工具,适用于Windows、Mac和Linux平台。它支持多种数据库,包括MySQL、MariaDB、SQL Server、PostgreSQL、Oracle、SQLite等。用户可以通过Navicat Premium轻松地连接到各种数据库服务器,…...

【Linux】进程创建和终止 | slab分配器
进程创建 fork 1.fork 之后发生了什么 将给子进程分配新的内存块和内核数据结构(形成了新的页表映射)将父进程部分数据结构内容拷贝至子进程添加子进程到系统进程列表当中fork 返回,开始调度器调度 这样就可以回答之前返回两个值?…...

计算机网络--网络层
一、网络层的服务和功能 网络层主要为应用层提供端对端的数据传输服务 网络层接受运输层的报文段,添加自己的首部,形成网络层分组。分组是网络层的传输单元。网络层分组在各个站点的网络层之间传输,最终到达接收方的网络层。接收方网络层将运…...

【CSS】如何实现分栏布局
在CSS分栏布局中,设置宽度和样式是一个基本且重要的步骤。这可以通过直接应用样式到列元素(通常是div元素)上来实现。以下是一些常用的方法来设置分栏布局的宽度和样式: 1. 使用百分比宽度 使用百分比宽度可以使列的大小相对于其…...

2025湖北武汉智慧教育装备信息化展/智慧校园展/湖北高博会
2025武汉教育装备展,2025武汉智慧教育展,2025武汉智慧校园展,2025武汉教育信息化展,2025武汉智慧教室展,湖北智慧校园展,湖北智慧教室展,武汉教学设备展,湖北高教会,湖北高博会 2025湖北武汉智慧教育装备信息化展/智慧校园展/湖北高博会 2025第10届武汉国际教育装备及智慧校园…...

Android Studio Run窗口中文乱码解决办法
Android Studio Run窗口中文乱码解决办法 问题描述: AndroidStudio 编译项目时Run窗口中文乱码,如图: 解决方法: 依次打开菜单:Help--Edit Custom VM Options,打开studio64.exe.vmoptions编辑框…...

代码随想录——划分字母区间(Leetcode763)
题目链接 贪心 class Solution {public List<Integer> partitionLabels(String s) {int[] count new int[27];Arrays.fill(count,0);// 统计元素最后一次出现的位置for(int i 0; i < s.length(); i){count[s.charAt(i) - a] i;}List<Integer> res new Ar…...

SQL注入方法
文章目录 前言如何测试与利用注入点手工注入思路工具sqlmap-r-u-m--level--risk-v-p--threads-batch-smart--os-shell--mobiletamper插件获取数据的相关参数 前言 记录一些注入思路和经常使用的工具,后续有用到新的工具和总结新的方法再继续补充。 如何测试与利用注…...

Vue表单输入绑定v-model
表单输入绑定 在前端处理表单时,我们常常需要将表单输入框的内容同步给Javascript中相应的变量。手动连接绑定和更改事件监听器可能会很麻,v-model 指令帮我们简化了这一步骤。 <template><h3>表单输入绑定</h3><hr> <inpu…...

【分布式系统】ELK 企业级日志分析系统
目录 一.ELK概述 1.简介 1.1.可以添加的其他组件 1.2.filebeat 结合 logstash 带来好处 2.为什么使用ELK 3.完整日志系统基本特征 4.工作原理 二.部署ELK日志分析系统 1.初始化环境 2.完成JAVA部署 三. ELK Elasticsearch 集群部署 1.安装 2.修改配置文件 3.es 性…...

vs2019 无法打开项目文件
vs2019 无法打开项目文件,无法找到 .NET SDK。请检查确保已安装此项且 global.json 中指定的版本(如有)与所安装的版本相匹配 原因:缺少组件 解决方案:选择需要的组件进行安装完成...

Elasticsearch:Painless scripting 语言(一)
Painless 是一种高性能、安全的脚本语言,专为 Elasticsearch 设计。你可以使用 Painless 在 Elasticsearch 支持脚本的任何地方安全地编写内联和存储脚本。 Painless 提供众多功能,这些功能围绕以下核心原则: 安全性:确保集群的…...

SpringBoot项目练习
文章目录 SpringBootVue后台管理系统所需软件下载、安装、版本查询Vue搭建一个简单的Vue项目 Spring项目1项目架构 SpringBootVue后台管理系统 学习视频: https://www.bilibili.com/video/BV1U44y1W77D/?spm_id_from333.337.search-card.all.click&vd_sourcec…...