Python - 数据分析三剑客之Pandas

阅读前可参考NumPy文章

https://blog.csdn.net/MinggeQingchun/article/details/148253682https://blog.csdn.net/MinggeQingchun/article/details/148253682

Pandas是Python中一个强大的开源数据分析库,专门用于处理结构化数据(如表格、时间序列等),其核心数据结构为Series(一维数组)和DataFrame(二维表格)。‌ 它基于NumPy构建,提供高效的数据清洗、操作、聚合及可视化功能,广泛应用于数据科学领域。 

Pandas官方文档:pandas documentation — pandas 2.2.3 documentation

1‌、核心数据结构‌

Series‌:一维带标签数组,可存储任意数据类型(数值、字符串等),索引支持自定义或自动生成

DataFrame‌:二维表格型结构,由多个Series组成,支持行列索引和异构数据类型(每列类型可不同),类似Excel或SQL表‌‌

2‌、核心功能‌

‌数据清洗‌:处理缺失值、去重、类型转换等

‌数据操作‌:筛选、切片、合并、分组聚合(如groupby)及透视表功能

‌时间序列支持‌:专为金融数据分析设计,提供时间索引和窗口计算‌‌

3‌、技术优势‌

高效性‌:基于NumPy的向量化操作,避免循环,优化内存使用

兼容性‌:支持多种数据格式(CSV、Excel、JSON等)的读写,并集成Matplotlib可视化

SQL-like操作‌:支持类似SQL的join和复杂查询,简化数据分析流程

4、Pandas 适用场景

  • 数据清洗(处理缺失值、异常值、重复数据)

  • 数据分析(统计、聚合、可视化前处理)

  • 机器学习数据预处理(特征工程)

  • 金融、科研、商业数据分析

Pandas 通常与 NumPy(数值计算)、Matplotlib/Seaborn(可视化)、Scikit-learn(机器学习) 结合使用,是 Python 数据科学生态的核心工具之一。

一、Series

Series 是 Pandas 中最基本的一维数据结构(类似带标签的数组),可以存储整数、浮点数、字符串、Python对象等类型的数据

Series‌:一维带标签数组,可存储任意数据类型(数值、字符串等),索引支持自定义或自动生成,由下面2个部分组成:

- values:一组数据(ndarray类型)

- index:相关的数据索引标签

1、创建 Series

import pandas as pd# 从列表创建
s1 = pd.Series([1, 3, 5, 7, 9])  # 从字典创建(键自动变成索引)
s2 = pd.Series({"A": 10, "B": 20, "C": 30})# 指定索引和数据类型
s3 = pd.Series([1.1, 2.2, 3.3], index=["X", "Y", "Z"], dtype="float64")

输出示例

s1:
0    1
1    3
2    5
3    7
4    9
dtype: int64s2:
A    10
B    20
C    30
dtype: int64

2、访问数据

按索引标签或位置

# 按标签
s2["A"]  # 返回 10# 按位置(从0开始)
s2[1]    # 返回 20# 切片(类似列表)
s1[1:4]  # 返回第2~4个元素

布尔索引(条件筛选)

s = pd.Series([10, 20, 30, 40], index=["a", "b", "c", "d"])
s[s > 20]  # 返回大于20的值

输出

c    30
d    40
dtype: int64

3、修改数据

# 修改单个值
s2["A"] = 99  # 批量修改
s2.replace(20, 200, inplace=True)  # 把20替换成200# 增加新数据
s2["D"] = 40  # 新增索引"D",值为40

4、常用统计计算

s = pd.Series([1, 2, 3, 4, 5])s.sum()    # 求和 → 15
s.mean()   # 平均值 → 3.0
s.max()    # 最大值 → 5
s.min()    # 最小值 → 1
s.std()    # 标准差 → 1.581
s.value_counts()  # 统计每个值的出现次数

5、缺失值处理

s = pd.Series([1, None, 3, None, 5])s.isnull()   # 返回布尔Series,标记缺失值
s.dropna()   # 删除缺失值
s.fillna(0)  # 用0填充缺失值

6、向量化运算(类似NumPy)

s1 = pd.Series([1, 2, 3])
s2 = pd.Series([10, 20, 30])s1 + s2      # 对应位置相加 → [11, 22, 33]
s1 * 2       # 所有元素乘以2 → [2, 4, 6]
s1 ** 2      # 平方 → [1, 4, 9]

7、索引操作

s = pd.Series([10, 20, 30], index=["A", "B", "C"])# 修改索引
s.index = ["X", "Y", "Z"]# 重置索引(变成默认0,1,2...)
s.reset_index(drop=True, inplace=True)  # `drop=True` 表示丢弃原索引

8、与 DataFrame 交互

Series 可以看作 DataFrame 的一列:

df = pd.DataFrame({"A": [1, 2, 3], "B": [4, 5, 6]})
col_a = df["A"]  # 提取列"A" → 返回Series

总结

操作示例
创建pd.Series([1, 2, 3])
访问数据s[0] 或 s["A"]
条件筛选s[s > 2]
修改数据s["A"] = 10
统计计算s.mean()
缺失值处理s.fillna(0)
向量化运算s1 + s2

Series 是 Pandas 的基础,熟练掌握后能更高效地处理 DataFrame!

二、DataFrame

DataFrame 是 Pandas 最核心的二维数据结构(类似 Excel 表格或 SQL 表),由行(index)和列(columns)组成,每列可以是不同数据类型。

行索引:index

列索引:columns

值:values(NumPy的二维数组)

(一)DataFrame基本操作

1、创建 DataFrame

import pandas as pd# 从字典创建(键是列名,值是数据)
data = {"姓名": ["张三", "李四", "王五"],"年龄": [25, 30, 28],"城市": ["北京", "上海", "广州"]}
df = pd.DataFrame(data)# 从列表创建(需指定列名)
data = [["张三", 25, "北京"], ["李四", 30, "上海"], ["王五", 28, "广州"]]
df = pd.DataFrame(data, columns=["姓名", "年龄", "城市"])# 指定索引
df = pd.DataFrame(data, index=["A", "B", "C"])

输出示例

   姓名  年龄  城市
A  张三  25  北京
B  李四  30  上海
C  王五  28  广州

2、查看数据

df.head(2)      # 查看前2行
df.tail(1)       # 查看最后1行
df.shape         # 返回行数和列数 (3, 3)
df.columns       # 查看列名
df.index         # 查看行索引
df.info()        # 查看数据类型和内存信息
df.describe()    # 数值列的统计摘要(计数、均值、标准差等)

3、选择数据

选择列

df["姓名"]       # 返回 Series
df[["姓名", "城市"]]  # 返回多列(DataFrame)

选择行

df.loc["A"]          # 按索引标签选择行(返回 Series)
df.iloc[0]           # 按位置选择行(第1行)
df.loc[["A", "C"]]   # 选择多行(按标签)
df.iloc[0:2]         # 切片选择行(第1~2行)

条件筛选

df[df["年龄"] > 25]              # 年龄大于25的行
df[(df["城市"] == "北京") | (df["年龄"] < 30)]  # 复合条件

4、修改数据

修改列名

df.rename(columns={"姓名": "Name", "城市": "City"}, inplace=True)

修改值

df.loc["A", "年龄"] = 26    # 修改单个值
df["年龄"] = df["年龄"] + 1  # 整列运算

新增列

df["性别"] = ["男", "女", "男"]          # 直接赋值
df["是否成年"] = df["年龄"] > 18          # 基于条件

删除列或行

df.drop("城市", axis=1, inplace=True)  # 删除列
df.drop("A", axis=0, inplace=True)    # 删除行

5、缺失值处理

df.isnull()       # 检查缺失值
df.dropna()       # 删除包含缺失值的行
df.fillna(0)      # 用0填充缺失值

6、排序

df.sort_values("年龄", ascending=False)  # 按年龄降序
df.sort_index(ascending=False)          # 按索引降序

7、分组与聚合

df.groupby("城市")["年龄"].mean()   # 按城市分组计算平均年龄
df.groupby("城市").agg({"年龄": "mean", "姓名": "count"})  # 多聚合

8、合并 DataFrame

# 纵向合并(类似 SQL UNION)
pd.concat([df1, df2], axis=0)# 横向合并(类似 SQL JOIN)
pd.merge(df1, df2, on="共同列", how="inner")  # 内连接

9、保存数据

df.to_csv("data.csv", index=False)   # 保存为 CSV
df.to_excel("data.xlsx", index=False)  # 保存为 Excel

总结

操作示例
创建pd.DataFrame({"列名": [数据]})
选择列df["列名"]
选择行df.loc["索引"]
条件筛选df[df["年龄"] > 25]
修改数据df.loc["A", "年龄"] = 26
新增列df["新列"] = 值
分组聚合df.groupby("城市").mean()
保存df.to_csv("data.csv")

Series 和 DataFrame 的区别

(二)缺失数据处理 

1、缺失值的表示

在 Pandas 中,缺失数据主要由以下两种形式表示:

  • NaN (Not a Number): 用于浮点数据类型

  • None: 用于对象数据类型

import pandas as pd
import numpy as npdf = pd.DataFrame({'A': [1, 2, np.nan, 4],'B': [5, np.nan, np.nan, 8],'C': ['a', 'b', None, 'd']
})

2、检测缺失值

2.1 检查单个缺失值

pd.isna(df.loc[2, 'A'])  # 检查特定位置是否为缺失值
pd.notna(df.loc[0, 'B'])  # 检查特定位置是否不是缺失值

2.2 检查整个DataFrame

df.isna()  # 返回布尔DataFrame,显示每个元素是否为缺失值
df.isnull()  # isna()的别名,功能相同df.notna()  # 返回布尔DataFrame,显示每个元素是否不是缺失值
df.notnull()  # notna()的别名

2.3 统计每列的缺失值数量

df.isna().sum()  # 每列缺失值计数
df.isna().mean()  # 每列缺失值比例

3、删除缺失值

3.1 删除包含缺失值的行

df.dropna()  # 删除任何包含缺失值的行
df.dropna(how='all')  # 只删除全为缺失值的行
df.dropna(thresh=2)  # 保留至少有2个非缺失值的行

3.2 删除包含缺失值的列

df.dropna(axis=1)  # 删除任何包含缺失值的列
df.dropna(axis=1, how='all')  # 只删除全为缺失值的列

4、填充缺失值

4.1 用固定值填充

df.fillna(0)  # 用0填充所有缺失值
df.fillna({'A': 0, 'B': 1, 'C': 'unknown'})  # 不同列用不同值填充

4.2 前向填充和后向填充

df.fillna(method='ffill')  # 用前一个非缺失值填充
df.fillna(method='bfill')  # 用后一个非缺失值填充
df.fillna(method='ffill', limit=1)  # 限制填充的连续缺失值数量

4.3 用统计值填充

df.fillna(df.mean())  # 用各列均值填充数值列
df.fillna(df.median())  # 用中位数填充
df.fillna(df.mode().iloc[0])  # 用众数填充

4.4 插值填充

df.interpolate()  # 线性插值
df.interpolate(method='time')  # 时间序列插值
df.interpolate(method='polynomial', order=2)  # 多项式插值

5、处理缺失值的注意事项

  1. 数据分析前:应该先了解缺失值的比例和模式

  2. 删除缺失值:当缺失比例很小时适用,大量缺失时会导致信息损失

  3. 填充缺失值:要选择合理的方法,避免引入偏差

  4. 时间序列数据:通常使用插值或前向/后向填充

  5. 机器学习模型:有些模型可以直接处理缺失值,有些需要先处理

(三)Pandas 层次化索引(MultiIndex)

1、创建层次化索引

1、创建具有 MultiIndex 的 Series

import pandas as pd
import numpy as np# 从元组列表创建
arrays = [['北京', '北京', '上海', '上海'],['东城', '西城', '浦东', '静安']]
index = pd.MultiIndex.from_arrays(arrays, names=('城市', '区域'))
s = pd.Series([1200, 1500, 1800, 1600], index=index)# 从元组直接创建
tuples = [('北京', '东城'), ('北京', '西城'), ('上海', '浦东'), ('上海', '静安')]
index = pd.MultiIndex.from_tuples(tuples, names=['城市', '区域'])

2、创建具有 MultiIndex 的 DataFrame

# 方法1:通过set_index
data = {'城市': ['北京', '北京', '上海', '上海'],'区域': ['东城', '西城', '浦东', '静安'],'房价': [1200, 1500, 1800, 1600],'租金': [60, 75, 90, 80]
}
df = pd.DataFrame(data).set_index(['城市', '区域'])# 方法2:直接创建MultiIndex
index = pd.MultiIndex.from_product([['北京', '上海'], ['东城', '西城', '浦东', '静安']],names=['城市', '区域'])
df = pd.DataFrame(np.random.randn(8, 2), index=index, columns=['房价', '租金'])

2、索引操作

1、选择数据

# 选择一级索引
df.loc['北京']  # 选择北京所有区域数据# 选择多级索引
df.loc[('北京', '东城')]  # 选择北京东城数据
df.loc[[('北京', '东城'), ('上海', '浦东')]]  # 选择多个组合# 使用xs方法跨级选择
df.xs('东城', level='区域')  # 选择所有城市的东城区

2、部分索引

# 使用slice(None)选择部分索引
df.loc[('北京', slice(None)), :]  # 北京所有区域
df.loc[(slice(None), '东城'), :]  # 所有城市的东城区

三、聚合(Aggregation)级联(Concatenation)函数 

在Pandas中,使用聚合(Aggregation)和级联(Chaining)函数操作是处理和分析数据帧(DataFrame)的常见方法。这些操作可以帮助你从数据中提取有用的信息、执行计算并生成新的数据集。

(一)聚合操作(Aggregation)

聚合操作通常用于将数据分组后对每个组进行计算。这可以通过groupby()方法实现,然后使用agg()aggregate()方法进行聚合计算。

常用的聚合函数包括:

  • sum() – 求和

  • mean() – 均值

  • max() / min() – 最大值 / 最小值

  • count() – 计数

  • std() – 标准差

  • agg() – 自定义聚合(可同时计算多个统计量)

(1)基本聚合操作

import pandas as pd# 示例 DataFrame
df = pd.DataFrame({'Category': ['A', 'B', 'A', 'B', 'A'],'Value': [10, 20, 30, 40, 50]
})# 按 'Category' 分组并计算均值
grouped = df.groupby('Category').mean()
print(grouped)输出:
Category     Value       
A            30
B            30

(2)agg() 多聚合计算

# 同时计算多个统计量
result = df.groupby('Category').agg({'Value': ['sum', 'mean', 'max']
})
print(result)输出:        
Category     sum mean  max                
A            90   30   50
B            60   30   40

(3)apply() 自定义聚合

# 自定义聚合函数
def custom_agg(x):return x.max() - x.min()result = df.groupby('Category')['Value'].apply(custom_agg)
print(result)输出:
Category
A    40
B    20
Name: Value, dtype: int64

(二)级联函数操作(Chaining)

级联是指将多个 DataFrame 或 Series 沿某个轴(行或列)拼接在一起。主要使用:

  • pd.concat() – 通用拼接

  • append() – 追加行(已弃用,推荐用 concat

(1)pd.concat() 基本使用

df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df2 = pd.DataFrame({'A': [5, 6], 'B': [7, 8]})# 默认按行(axis=0)拼接
result = pd.concat([df1, df2])
print(result)输出:A  B
0  1  3
1  2  4
0  5  7
1  6  8

(2)按列拼接(axis=1

result = pd.concat([df1, df2], axis=1)
print(result)输出:A  B  A  B
0  1  3  5  7
1  2  4  6  8

(3)ignore_index=True 重置索引

result = pd.concat([df1, df2], ignore_index=True)
print(result)输出:A  B
0  1  3
1  2  4
2  5  7
3  6  8

(4)append()(不推荐,建议用 concat

# 追加行(已弃用,推荐用 concat)
result = df1.append(df2, ignore_index=True)
print(result)

(三)聚合 vs. 级联对比

操作主要函数用途
聚合groupby()agg()sum()mean()数据分组计算统计量
级联pd.concat()append()合并多个 DataFrame

总结

操作适用场景关键函数
聚合分组计算统计量groupby()agg()sum()mean()
级联合并多个 DataFramepd.concat()append()(不推荐)

四、Pandas画图 

在 Pandas 中,可以直接使用 DataFrame.plot() 和 Series.plot() 进行数据可视化,底层基于 Matplotlib,但语法更简洁。

1、基本绘图方法

Pandas 支持多种图表类型,通过 kind 参数指定:

  • line – 折线图(默认)

  • bar / barh – 柱状图 / 横向柱状图

  • hist – 直方图

  • box – 箱线图

  • pie – 饼图

  • scatter – 散点图

  • area – 面积图

如:DataFrame

import pandas as pd
import numpy as npdf = pd.DataFrame({'A': np.random.rand(10),'B': np.random.rand(10),'C': np.random.rand(10)
}, index=pd.date_range('2023-01-01', periods=10))

2、常见图表

(1) 折线图(kind='line'

df.plot(kind='line', title='Line Plot', figsize=(8, 4))

(2) 柱状图(kind='bar'

df.head(5).plot(kind='bar', title='Bar Plot', figsize=(8, 4))

(3) 横向柱状图(kind='barh'

df.head(3).plot(kind='barh', title='Horizontal Bar Plot')

(4) 直方图(kind='hist'

df['A'].plot(kind='hist', bins=5, title='Histogram')

(5) 箱线图(kind='box'

df.plot(kind='box', title='Box Plot')

(6) 饼图(kind='pie'

df['A'].head(5).plot(kind='pie', autopct='%.1f%%', title='Pie Chart')

(7) 散点图(kind='scatter'

df.plot(kind='scatter', x='A', y='B', title='Scatter Plot')

3、自定义图表样式

(1) 调整大小、颜色、标题

df.plot(kind='line',figsize=(10, 5),title='Customized Plot',color=['red', 'green', 'blue'],linewidth=2,alpha=0.7  # 透明度
)

(2) 添加网格、图例、坐标轴标签

ax = df.plot(kind='bar')
ax.grid(True, linestyle='--')  # 网格线
ax.set_xlabel('Date')          # X轴标签
ax.set_ylabel('Value')         # Y轴标签
ax.legend(loc='upper right')   # 图例位置

(3) 子图(多个图表并列)

df.plot(kind='line',subplots=True,  # 每个列一个子图layout=(2, 2),  # 2行2列figsize=(10, 8)
)

4、直接使用 Matplotlib 增强功能

Pandas 绘图返回的是 Matplotlib 的 Axes 对象,可以进一步自定义:

import matplotlib.pyplot as pltax = df.plot(kind='bar')
ax.set_title('Enhanced Plot')
plt.xticks(rotation=45)  # 旋转X轴标签
plt.tight_layout()       # 自动调整布局
plt.show()

5、保存图表

ax = df.plot(kind='line')
ax.figure.savefig('plot.png', dpi=300, bbox_inches='tight')  # 保存为PNG

总结

功能方法示例
折线图df.plot(kind='line')趋势分析
柱状图df.plot(kind='bar')分类对比
直方图df['col'].plot(kind='hist')分布查看
箱线图df.plot(kind='box')离群值检测
饼图df['col'].plot(kind='pie')占比分析
散点图df.plot(kind='scatter', x='A', y='B')相关性分析
保存图表ax.figure.savefig('file.png')导出图片

Pandas 绘图适合快速探索数据,如需更复杂可视化,可结合 Matplotlib 或 Seaborn!

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

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

相关文章

深度解析:Python实战京东资产拍卖平台爬虫,从ID抓取到详情数据落地

深度解析:Python实战京东资产拍卖平台爬虫,从ID抓取到详情数据落地 对爬虫、逆向感兴趣的同学可以查看文章,一对一小班教学(系统理论和实战教程)、提供接单兼职渠道:https://blog.csdn.net/weixin_35770067/article/details/142514698 文章目录 深度解析:Python实战京东…

ServletConfig 接口详解

ServletConfig 接口详解 1. 核心概念 ServletConfig 是 Servlet 规范中定义的核心接口&#xff0c;用于在 Servlet 初始化阶段向 Servlet 传递配置信息。每个 Servlet 都有自己独立的 ServletConfig 对象。 2. 关键特性特性说明唯一性每个 Servlet 实例拥有独立的 ServletConfi…

Maven学习总结(62)—— Maven 打包瘦身和提速解决方案

臃肿的 Maven 项目 在 Java 项目开发中,Maven 作为强大的项目管理和构建工具,极大地简化了依赖管理和项目构建过程。但随着项目的不断演进,依赖的 Jar 包越来越多,我们的 Maven 项目也逐渐变得臃肿不堪。曾经,我参与维护一个大型的 Spring Boot 项目,随着业务功能的不断…

【Qt开发】Qt的背景介绍(三)-> 认识Qt Creator

目录 1 -> Qt Creator概览 2 -> 使用Qt Creator创建项目 2.1 -> 新建项目 2.2 -> 选择项目模板 2.3 -> 选择项目路径 2.4 -> 选择构建系统 2.5 -> 填写类信息设置界面 2.6 -> 选择语言和翻译文件 2.7 -> 选择Qt套件 2.8 -> 选择版本控…

HTML5中的自定义属性

自定义属性&#xff08;Custom Attributes&#xff09; 允许在标准 HTML 属性之外&#xff0c;为元素添加额外的元数据&#xff08;metadata&#xff09;。 1. 标准方式&#xff1a;data-* 属性 HTML5 引入了 data-* 前缀的自定义属性规范&#xff0c;所有以 data- 开头的属性都…

前端项目利用Gitlab CI/CD流水线自动化打包、部署云服务

叠甲前言 本文仅作为个人学习GitLab的CI/CD功能记录&#xff0c;不适合作为专业性指导&#xff0c;如有纰漏&#xff0c;烦请君指正。 Gitlab的CI/CD做什么用的 自工作以来&#xff0c;去过大大小小公司&#xff0c;有一些公司技术人员专业性欠佳&#xff0c;每当产品经理或…

基于typescript严格模式以实现undo和redo功能为目标的命令模式代码参考

下面是一个完整的、严格模式下的 TypeScript 实现&#xff0c;包含 CommandManager、Command 和 CompositeCommand 类&#xff0c;支持 undo/redo 功能。完整实现代码1. Command 接口和基类// src/commands/ICommand.ts export interface ICommand {execute(): void;undo(): vo…

2022年CIE SCI2区TOP,NSGA-II+直升机-无人机搜救任务分配,深度解析+性能实测

目录1.摘要2.数学模型3.求解方法4.结果展示5.参考文献6.代码获取7.算法辅导应用定制读者交流1.摘要 无人机任务分配对于保障搜救活动高效有序开展具有重要意义&#xff0c;但现有研究较少考虑无人机作业环境与性能对任务分配的影响。针对低空风场和地形因素对无人机能耗与性能…

暑期算法训练.4

目录 15.力扣 904.水果成篮 15.1 题目解析&#xff1a; 15.2 算法思路&#xff1a; 15.2.1 暴力解法&#xff1a; 15.2.1 滑动窗口 15.3代码演示&#xff1a; 15.4 总结反思&#xff1a; 16 力扣 438.找出字符串中所有字母的异位词 16.1 题目解析&#xff1a; 16.2算法…

关于个人博客系统的测试报告

1&#xff09;项目背景2&#xff09;项目功能介绍 登陆写博客/编辑已存在博客删除博客注销 2&#xff09;基于项目功能设计相关测试用例3&#xff09;基于测试用例编写自动化测试 准备工作登陆界面相关博客首页相关博客详情页相关编辑博客相关删除博客相关注销相关 4&#xff0…

Spring Boot 与微服务详细总结

一、Spring Boot 核心概述 Spring Boot 是简化 Spring 应用开发的框架&#xff0c;作为 Spring 技术栈的整合方案和 J2EE 开发的一站式解决方案&#xff0c;其核心优势体现在&#xff1a; 快速创建独立运行的 Spring 项目&#xff0c;轻松集成主流框架内置 Servlet 容器&…

轻松上手:从零开始启动第一个 Solana 测试节点

嗨&#xff0c;各位技术爱好者们&#xff01; 大家是否对 Solana 的“光速”交易处理能力感到好奇&#xff1f;或者你是一名开发者&#xff0c;正准备在 Solana 上构建下一个杀手级 dApp&#xff1f;无论大家是出于学习目的还是实际开发需求&#xff0c;亲手运行一个 Solana 节…

Gerrit workflow

提交代码 每次提交代码前&#xff0c;先执行 git pull --rebase &#xff0c;确保已经合并天上代码&#xff0c;解决冲突 git add git commit -m git push origin HEAD:refs/for/{BRANCH_NAME} 可考虑设置 alias 方式&#xff0c;参考下文 CR-2 情况处理(verify-1情况一样处理…

量化交易如何查询CFD指数实时行情

CFD即所谓的差价合约&#xff0c;是投资者在不拥有实际资产的情况下&#xff0c;交易金融市场的一种方式。最近笔者研究这一块比较多&#xff0c;但查遍整个中文互联网却很少找到关于CFD实时行情的查询教程。因此有了这篇文章。以下我将通过一个简单的Python代码示例&#xff0…

sql练习二

首先&#xff0c;建表。创建学生表和score表接着导入创建好基础信息就可以开始做了。3、分别查询student表和score表的所有记录4、查询student表的第2条到第5条记录5、从student表中查询计算机系和英语系的学生的信息6、从student表中查询年龄小于22岁的学生信息7、从student表…

windows11下基于docker单机部署ceph集群

windows下基于docker单机部署ceph集群 创建ceph专用网络 docker network create --driver bridge --subnet 172.20.0.0/16 ceph-network查看是否创建成功&#xff08;查看创建状态&#xff09; docker network inspect ceph-network拉取镜像&#xff1a;(镜像源自行选择) docke…

使用DataGrip连接安装在Linux上的Redis

目录 一、前言 二、开放防火墙端口 三、使用DataGrip连接安装在Linux上的Redis 一、前言 在学习黑马Redis从入门到实战的视频&#xff0c;完成了Redis在linux上的安装配置之后&#xff0c;我们可以使用图形化界面方便操作使用redis数据库。在24年JavaWebAI学习时连接MySQL数…

MySQL的union、union all导致排序失效

今天练习SQL&#xff0c;使用union all 连接各个查询导致我的各个查询排序失效&#xff0c;最后发现使用union all后会忽略各个模块的order by&#xff0c;只有最外层的order by才会生效原SQL如下&#xff1a;( selectexam_id tid,count(distinct uid) uv, count(uid) pv frome…

LVS 集群技术实践:NAT 与 DR 模式的配置与对比

1 实验环境规划 实验目标是搭建一个负载均衡集群&#xff0c;通过 LVS 调度器将流量分发到两台真实服务器&#xff08;RS1 和 RS2&#xff09;。2.网络配置3 实验步骤关闭防火墙和 SELinux安装 HTTP 服务&#xff08;在 RS21和 RS2 上&#xff09;&#xff1a;sudo systemctl s…

YOLOv8中添加SENet注意力机制

注意力机制(Attention Mechanism)是深度学习中的一种方法,在图像处理领域,尤其是在卷积神经网络(CNN)和视觉Transformer等架构中。图像数据具有局部相关性,注意力机制可以帮助模型聚焦于图像中更重要的区域,从而提升处理效果。 SENet(Squeeze-and-Excitation Network)…