pandas操作Excel文件

pandas操作Excel文件

  • 一、前言
  • 二、指定读取的工作表与header设置
    • 2.1指定工作表
    • 2.2header设置
  • 三、读取Excel数据
    • 3.1iloc读取数据
    • 3.2read_excel读取数据
    • 3.3loc读取数据
  • 四、DataFrame数据筛选
    • 4.1根据列标签对整列进行筛选
    • 4.2使用iloc对区域进行筛选
    • 4.3自定义筛选
  • 五、DataFrame类型与numpy数组相互转换
    • 5.1DataFrame类型转换为numpy数组
    • 5.2numpy数组转换为DataFrame类型
  • 六、写入Excel文件

一、前言

在python语言中,相较于其他操作Excel文件的工具包,pandas提供了高层次的数据操作接口,读取Excel中的数据更方便,且DataFrame数据结构可与numpy数组相互转换,便于后续数据处理与保存。

二、指定读取的工作表与header设置

2.1指定工作表

pandas可以根据工作表的名称或索引指定读取工作表,也可以将工作簿中的工作表全部读取,示例代码如下:

import pandas as pdexcel_data = pd.read_excel('data.xlsx', sheet_name = 'Sheet1')#指定读取名为Sheet1的工作表
excel_data = pd.read_excel('data.xlsx', sheet_name = 1)#指定读取第二个工作表,如只有一个工作表则报错
excel_data = pd.read_excel('data.xlsx', sheet_name = None)#读取所有工作表,返回一个字典,字典中键名为工作表名称,键值为DataFrame格式的工作表内容
excel_data = pd.read_excel('data.xlsx')#不指定读取的工作表时,默认读取第一个工作表

2.2header设置

以读取data.xlsx工作簿的Sheet1工作表为例,表格内容如下图,
在这里插入图片描述

示例代码如下:

import pandas as pdexcel_data = pd.read_excel('data.xlsx')
data = excel_data.iloc[0:3, 0:1]#索引从0开始,读取第一行至第三行、第一列的数据
print(data)#输出如下0.53
0  0.45
1  0.66
2  0.72data = excel_data.iloc[1:3, 0:1]#读取第二行至第三行、第一列的数据
print(data)#输出如下0.53
1  0.66
2  0.72

上述读取Excel指定区域的代码,默认将读取的excel文件中的第一行数据当做了列标签,所以读取的第一行数据其实是Excel中的第二行数据,即0.45而不是0.53。注意0.45前的0为索引,即认为是第一行数据,而0.53前没有索引,将其认为是列的标签。

如果Excel中第一行不是列标签,那么可以通过如下代码设置取消掉header标识

excel_data = pd.read_excel('data.xlsx', header = None)
data = excel_data.iloc[0:3, 0:1]#索引从0开始,读取第一行至第三行、第一列的数据
print(data)#输出如下0
0  0.53
1  0.45
2  0.66data = excel_data.iloc[1:3, 0:1]#读取第二行至第三行、第一列的数据
print(data)#输出如下0
1  0.45
2  0.66

0.53前索引为0,即认为是第一行数据,0.45前索引为1,即认为是第二行数据,与Excel文件中的实际内容相吻合。

三、读取Excel数据

3.1iloc读取数据

使用iloc函数读取Excel指定区域数据的语法几乎与numpy二维数组的读取语法完全相同,如果对numpy数组切片读取很熟悉那么对iloc的用法可以快速掌握。

iloc读取数据时,先指定行,再指定列,索引从0开始,可指定读取一块区域数据,也可指定读取整行或整列数据,示例代码如下:

excel_data = pd.read_excel('data.xlsx', header = None)
data = excel_data.iloc[0:5, 0:4]#读取第一行至第五行、第一列至第四列的数据
print(data)#输出如下0     1     2     3
0  0.53  0.42  0.46  0.63
1  0.45  0.63  0.60  0.56
2  0.66  0.54  0.79  0.61
3  0.72  0.49  0.68  0.43
4  0.73  0.49  0.67  0.66data = excel_data.iloc[0:, 0:4]#读取第一列至第四列整列的数据,行中如有空格则会被读取为NaN值
data = excel_data.iloc[:, 0:4]#与上行代码结果相同
print(data)#输出如下0      1      2      3
0    0.53   0.42   0.46   0.63
1    0.45   0.63   0.60   0.56
2    0.66   0.54   0.79   0.61
3    0.72   0.49   0.68   0.43
4    0.73   0.49   0.67   0.66
5    0.62   0.58   0.80   0.34
6    0.30   0.53   0.44   0.59
7    0.52   0.63   0.56   0.46
8    0.57   0.40   0.52   0.76
9    0.72   0.62   0.33   0.59data = excel_data.iloc[0:5, 0:]#读取第一行至第五行整行的数据,列中如有空格则会被读取为NaN值
data = excel_data.iloc[0:5, ]#与上行代码结果相同
data = excel_data.iloc[0:5]#与上行代码结果相同
print(data)#输出如下0      1      2      3
0    0.53   0.42   0.46   0.63
1    0.45   0.63   0.60   0.56
2    0.66   0.54   0.79   0.61
3    0.72   0.49   0.68   0.43
4    0.73   0.49   0.67   0.66

3.2read_excel读取数据

read_excel是读取Excel文件时调用的函数方法,返回的是包含工作表全部内容的DataFrame结构数据,可以通过设置read_excel的参数读取整行或整列数据,但无法像iloc那样可以灵活读取指定区域的数据,示例代码如下:

data = pd.read_excel('data.xlsx', header = None, skiprows = 2, nrows = 2)#跳过前两行,读取第三行和第四行整行数据
print(data)#输出如下0      1      2      3
0    0.66   0.54   0.79   0.61
1    0.72   0.49   0.68   0.43data = pd.read_excel('data.xlsx', header = None, usecols = [0, 2])#读取第一列和第三列整列数据
data = pd.read_excel('data.xlsx', header = None, usecols = 'A,C')#与上行代码结果相同
print(data)#输出如下0      2
0    0.53   0.46
1    0.45   0.60
2    0.66   0.79
3    0.72   0.68
4    0.73   0.67
5    0.62   0.80
6    0.30   0.44
7    0.52   0.56
8    0.57   0.52
9    0.72   0.33data = pd.read_excel('data.xlsx', header = None, usecols = 'A:C')#读取第一列至第三列整列数据
print(data)#输出如下0      1      2
0    0.53   0.42   0.46
1    0.45   0.63   0.60
2    0.66   0.54   0.79
3    0.72   0.49   0.68
4    0.73   0.49   0.67
5    0.62   0.58   0.80
6    0.30   0.53   0.44
7    0.52   0.63   0.56
8    0.57   0.40   0.52
9    0.72   0.62   0.33

3.3loc读取数据

loc函数是基于行列标签读取数据,如果工作表中存在行列标签,就可以通过指定标签读取数据,但行列标签名必须唯一不能重复,否则会报错,也可以临时增加列标签和行标签(pandas中称为行索引)

读取整列数据示例代码如下:

excel_data = pd.read_excel('data.xlsx')
data = excel_data.loc[:, 0.42]#读取以0.42为列标签的整列数据
data = excel_data[0.42]#与上行代码结果相同
print(data)#输出如下
0      0.63
1      0.54
2      0.49
3      0.49
4      0.58
5      0.53
6      0.63
7      0.40
8      0.62data = excel_data.loc[:, 0.42:0.63]#读取从列标签0.42至0.63的整列数据
print(data)#输出如下0.42   0.46   0.63
0    0.63   0.60   0.56
1    0.54   0.79   0.61
2    0.49   0.68   0.43
3    0.49   0.67   0.66
4    0.58   0.80   0.34
5    0.53   0.44   0.59
6    0.63   0.56   0.46
7    0.40   0.52   0.76
8    0.62   0.33   0.59data = excel_data.loc[:, [0.42, 0.63]]#读取从列标签0.42、0.63的整列数据
print(data)#输出如下0.42   0.63
0    0.63   0.56
1    0.54   0.61
2    0.49   0.43
3    0.49   0.66
4    0.58   0.34
5    0.53   0.59
6    0.63   0.46
7    0.40   0.76
8    0.62   0.59excel_data.columns = ['column01', 'column02', 'column03', 'column04']#临时增加列标签,但会覆盖掉之前已有的列标签
data = excel_data.loc[:, 'column01':'column03']#读取从列标签column01至column3的整列数据
print(data)#输出如下column01  column02  column03
0      0.45      0.63      0.60
1      0.66      0.54      0.79
2      0.72      0.49      0.68
3      0.73      0.49      0.67
4      0.62      0.58      0.80
5      0.30      0.53      0.44
6      0.52      0.63      0.56
7      0.57      0.40      0.52
8      0.72      0.62      0.33

读取整行数据示例代码如下:

excel_data = pd.read_excel('data.xlsx', index_col = 0)#将第一列设置为行标签
data = excel_data.loc[0.45]#读取以0.45为行标签的整行数据
print(data)#输出如下
0.42            0.630
0.46            0.600
0.63            0.560data = excel_data.loc[0.45:0.66]#读取行标签从0.45至0.66的整行数据
print(data)#输出如下0.42  0.46  0.63
0.53
0.45  0.63  0.60  0.56
0.66  0.54  0.79  0.61data = excel_data.loc[0.45, 0.42]#读取行标签为0.45,列标签为0.42的单元格数据
print(data)#输出如下
0.63excel_data.index=['row01', 'row02', 'row03', 'row04', 'row05', 'row06', 'row07', 'row08', 'row09']#临时增加行标签,但会覆盖掉之前已有的行标签
data = excel_data.loc['row01':'row05']#读取行标签从row01至row05的整行数据
print(data)#输出如下0.42  0.46  0.63
row01  0.63  0.60  0.56
row02  0.54  0.79  0.61
row03  0.49  0.68  0.43
row04  0.49  0.67  0.66
row05  0.58  0.80  0.34

注意,行列标签如果为数值形式,那么在索引时直接以数值作索引,如果标签名为字符串,需要对字符串加上单引号或双引号。

四、DataFrame数据筛选

DataFrame数据筛选主要有以下三类:

4.1根据列标签对整列进行筛选

示例代码如下:

excel_data = pd.read_excel('data.xlsx', header = None)
excel_data.columns = ['column01', 'column02', 'column03', 'column04']
data = excel_data[excel_data['column01'] > 0.7]#筛选出column01列大于0.7的整行数据
data = excel_data.query('column01 > 0.7')#与上行代码结果相同
print(data)#输出如下column01  column02  column03  column04
3      0.72      0.49      0.68      0.43
4      0.73      0.49      0.67      0.66
9      0.72      0.62      0.33      0.59data = excel_data[excel_data['column01'].between(0.6, 0.7)]#筛选出column01列0.6与0.7之间的整行数据
data = excel_data.query('column01 >= 0.6 and column01 <= 0.7')#与上行代码结果相同
print(data)#输出如下column01  column02  column03  column04
2      0.66      0.54      0.79      0.61
5      0.62      0.58      0.80      0.34excel_data['column01'][0]='abc'#将column01列的第一行单元格赋值为abc
data = excel_data[excel_data['column01'].str.contains('a', case = False, na = False)]#筛选column01列中包含a的整行数据
print(data)#输出如下column01  column02  column03  column04
0      abc      0.42      0.46      0.63data = excel_data[excel_data['column01'].isin([0.30,0.45, 'abc'])]#筛选column01列中是否包含指定的值
print(data)#输出如下column01  column02  column03  column04
0      abc      0.42      0.46      0.63
1     0.45      0.63      0.60      0.56
6      0.3      0.53      0.44      0.59

4.2使用iloc对区域进行筛选

示例代码如下:

excel_data = pd.read_excel('data.xlsx', header = None)
data = excel_data.iloc[0:5, 0:4]#读取第一行至第五行、第一列至第四列的数据
print(data)#输出如下0     1     2     3
0  0.53  0.42  0.46  0.63
1  0.45  0.63  0.60  0.56
2  0.66  0.54  0.79  0.61
3  0.72  0.49  0.68  0.43
4  0.73  0.49  0.67  0.66data = data[data > 0.7]#筛选出区域内大于0.7的数据
print(data)#输出如下0   1     2   3
0   NaN NaN   NaN NaN
1   NaN NaN   NaN NaN
2   NaN NaN  0.79 NaN
3  0.72 NaN   NaN NaN
4  0.73 NaN   NaN NaNdata = excel_data[excel_data.iloc[:, 0] > 0.7]#筛选出第一列大于0.7的整行数据
print(data)#输出如下0     1     2     3
3  0.72  0.49  0.68  0.43
4  0.73  0.49  0.67  0.66
9  0.72  0.62  0.33  0.59

从上述代码可看出,对区域进行筛选,有可能出现NaN值

4.3自定义筛选

自定义筛选适用于筛选条件较为复杂的情况,通过apply函数实现,示例代码如下:

def filter_1(row):return row[0] > 0.7excel_data = pd.read_excel('data.xlsx', header = None)
data = excel_data[excel_data.apply(filter_1, axis = 1)]#筛选出第一列大于0.7的整行数据
print(data)#输出如下0     1     2     3
3  0.72  0.49  0.68  0.43
4  0.73  0.49  0.67  0.66
9  0.72  0.62  0.33  0.59

apply函数还可用于数据处理操作,示例代码如下:

excel_data = pd.read_excel('data.xlsx', header = None)
print(excel_data)#输出如下0     1     2     3
0  0.53  0.42  0.46  0.63
1  0.45  0.63  0.60  0.56
2  0.66  0.54  0.79  0.61
3  0.72  0.49  0.68  0.43
4  0.73  0.49  0.67  0.66
5  0.62  0.58  0.80  0.34
6  0.30  0.53  0.44  0.59
7  0.52  0.63  0.56  0.46
8  0.57  0.40  0.52  0.76
9  0.72  0.62  0.33  0.59new_data = excel_data.iloc[:, 0].apply(lambda x: x * 2)
print(new_data)#输出如下
0    1.06
1    0.90
2    1.32
3    1.44
4    1.46
5    1.24
6    0.60
7    1.04
8    1.14
9    1.44

五、DataFrame类型与numpy数组相互转换

5.1DataFrame类型转换为numpy数组

pandas读取Excel数据返回的是DataFrame数据结构,将其转换为numpy数组代码如下:

import numpy as npdata = excel_data.iloc[0:3, 0:4]#读取第一行至第三行、第一列至第四列的数据
print(type(data))#输出如下
<class 'pandas.core.frame.DataFrame'>print(data)#输出如下0     1     2     3
0  0.53  0.42  0.46  0.63
1  0.45  0.63  0.60  0.56
2  0.66  0.54  0.79  0.61a01 = np.array(data)#转换为numpy数组
print(a01)#输出如下
[[0.53 0.42 0.46 0.63][0.45 0.63 0.6  0.56][0.66 0.54 0.79 0.61]]data = excel_data.iloc[0:10, 0]#读取第一行至第十行、第一列的数据
print(type(data))#输出如下
<class 'pandas.core.series.Series'>print(data)#输出如下
0    0.53
1    0.45
2    0.66
3    0.72
4    0.73
5    0.62
6    0.30
7    0.52
8    0.57
9    0.72
Name: 0, dtype: float64a01 = np.array(data)#转换为numpy数组
print(a01)#输出如下
[0.53 0.45 0.66 0.72 0.73 0.62 0.3  0.52 0.57 0.72]data = excel_data.iloc[0:10, 0:1]#读取第一行至第十行、第一列的数据
print(type(data))#输出如下
<class 'pandas.core.frame.DataFrame'>print(data)#输出如下0
0  0.53
1  0.45
2  0.66
3  0.72
4  0.73
5  0.62
6  0.30
7  0.52
8  0.57
9  0.72a01 = np.array(data)#转换为numpy数组
print(a01)#输出如下
[[0.53][0.45][0.66][0.72][0.73][0.62][0.3 ][0.52][0.57][0.72]]

通过上述代码可看出,pandas不总是返回DataFrame类型,有时也返回Series类型,这与读取数据时指定单行单列或多行多列有关,而在转换为numpy数组时,DataFrame类型转换成二维数组,Series类型转换成一维数组

另外,如果DataFrame中包含标签,标签并不会被一起转换为numpy数组

5.2numpy数组转换为DataFrame类型

示例代码如下:

np_array = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
data = pd.DataFrame(np_array)
print(data)#输出如下0  1  2
0  1  2  3
1  4  5  6
2  7  8  9data = pd.DataFrame(np_array, columns=['column01', 'column02', 'column03'])#指定列标签
print(data)#输出如下column01  column02  column03
0         1         2         3
1         4         5         6
2         7         8         9

六、写入Excel文件

pandas是将DataFrame类型数据写入Excel文件中,可以向新文件写入,也可追加工作表写入,示例代码如下:

np_array = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
data = pd.DataFrame(np_array)
data.to_excel('test01.xlsx', sheet_name = 'data', index = False, header = False)#写入新Excel文件,index控制是否写入行索引,header控制是否写入列标签with pd.ExcelWriter('test01.xlsx', mode = 'a', engine = 'openpyxl') as writer:#追加写入data.to_excel(writer, sheet_name = 'data02', index = False, header = False)

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

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

相关文章

【GPT】Coze使用开放平台接口-【6】Dify 也来一遍

前面讲了 coze 的相关用法&#xff0c;这边想着用 Dify 也来一遍&#xff0c;刚开始的时候接触的是 Dify&#xff0c;后面才是 coze。Dify 和 coze 的侧重点不同&#xff0c;我个人是更倾向用 Dify 构建工作流就可以了&#xff0c;coze 还是相对全能。 本节用 Dify 也会创建插…

Linux文件IO缓存

一、缓冲区大小对 I/O 系统调用性能的影响 总之&#xff0c;如果与文件发生大量的数据传输&#xff0c;通过采用大块空间缓冲数据&#xff0c;以及执行更少的 系统调用&#xff0c;可以极大地提高 I / O 性能 二、stdio 库的缓冲 当操作磁盘文件时&#xff0c;缓冲大块数据以…

ArcGIS Pro技术应用

GIS是利用电子计算机及其外部设备&#xff0c;采集、存储、分析和描述整个或部分地球表面与空间信息系统。简单地讲&#xff0c;它是在一定的地域内&#xff0c;将地理空间信息和 一些与该地域地理信息相关的属性信息结合起来&#xff0c;达到对地理和属性信息的综合管理。GIS的…

Hreflang 和 SEO:新手完整指南

每天&#xff0c;数以百万计的法国用户访问像 Amazon.com 这样的全球网站。虽然 Amazon.com 的官方页面是英文的&#xff0c;但用户仍然可以看到法语的文本和产品描述。这是因为亚马逊的全球网站有针对法国的本地化版本&#xff0c;确保所有法国用户都可以自动看到法语的网站内…

五种多目标优化算法(NSGA3、MOPSO、MOGWO、NGSA2、SPEA2)性能对比,包含47个多目标测试函数,6种评价指标,MATLAB代码

一、五种多目标算法及六种评价指标简介 多目标灰狼优化算法&#xff08;MOGWO&#xff09;&#xff1a; MOGWO是由Mirjalili等人在2016年提出的&#xff0c;基于灰狼优化算法&#xff08;GWO&#xff09;的多目标版本。它引入了存档机制和改进的头狼选择方式&#xff0c;以处理…

uniapp(微信小程序如何使用单选框、复选框)

一、先看效果 二、数据结构 说明&#xff1a;selected用来记录每次用户选择的值&#xff0c;当是单选的时候属性中的selected属性需要设置成字符串&#xff0c;当是复选框的时候&#xff0c;此时选择的是数组&#xff0c;selected属性应设置为数组。type用来区分当前是单选还是…

【C++ Qt day3】

2、设计一个Per类&#xff0c;类中包含私有成员:姓名、年龄、指针成员身高、体重&#xff0c;再设计一个Stu类&#xff0c;类中包含私有成员:成绩、Per类对象p1&#xff0c;设计这两个类的构造函数、析构函数和拷贝构造函数。

PTA L1-027 出租

L1-027 出租&#xff08;20分&#xff09; 下面是新浪微博上曾经很火的一张图&#xff1a; 一时间网上一片求救声&#xff0c;急问这个怎么破。其实这段代码很简单&#xff0c;index数组就是arr数组的下标&#xff0c;index[0]2 对应 arr[2]1&#xff0c;index[1]0 对应 arr[0…

Java的IO模型详解-BIO,NIO,AIO

一、BIO相关知识 Java 的 BIO (Blocking I/O) 模型是基于传统的同步阻塞 I/O 操作。在这种模型中&#xff0c;每个客户端连接都需要一个独立的线程来处理请求。当线程正在执行 I/O 操作时&#xff08;如读取或写入&#xff09;&#xff0c;它会被阻塞&#xff0c;直到操作完成…

【读点论文】Scene Text Detection and Recognition: The Deep Learning Era

Scene Text Detection and Recognition: The Deep Learning Era Abstract 随着深度学习的兴起和发展&#xff0c;计算机视觉发生了巨大的变革和重塑。场景文本检测与识别作为计算机视觉领域的一个重要研究领域&#xff0c;不可避免地受到了这波革命的影响&#xff0c;从而进入…

Golang | Leetcode Golang题解之第376摆动序列

题目&#xff1a; 题解&#xff1a; int wiggleMaxLength(int* nums, int numsSize) {if (numsSize < 2) {return numsSize;}int prevdiff nums[1] - nums[0];int ret prevdiff ! 0 ? 2 : 1;for (int i 2; i < numsSize; i) {int diff nums[i] - nums[i - 1];if ((…

TD学习笔记————中级教程总结(NEW)

目录 Instance功能讲解 问题&#xff1a; 报错All ops must generate the same number of instances (have the same length Replicator功能讲解 问题&#xff1a; 视频分辨率过大 Cannot find function named:onValueChange Instance功能讲解 数据通道的长度要一致 N…

安泰功率放大器应用领域:MEMS传感器的应用有哪些

功率放大器的应用领域很广泛&#xff0c;从超声测试、材料测试、水声测试再到压电驱动、电磁驱动生物医疗&#xff0c;它都能为整个系统提供强劲的激励&#xff0c;同样功率放大器在MEMS传感器系统的激励中也有着良好应用&#xff0c;今天Aigtek安泰电子就带大家走进MEMS传感器…

Hadoop: Mapreduce了解

目录 1.MapReduce概述 2.MapReduce的基本工作原理 2.1.Map阶段 2.1.1.Map源码解析 2.1.2.map端代码总结 2.2.Shuffle and Sort阶段 2.3.Reduce阶段 2.3.1.Reduce源码解析 2.3.2.Reduce端源码总结 3.数据流与任务执行 3.1.数据输入与输出格式 3.1.1.TextInputFormat…

comfyui工作流,动漫转真人,效果炸裂!

在数字媒体制作领域&#xff0c;将动漫风格的图像转换为接近真人风格的视觉效果一直是一个具有挑战性的任务。最近&#xff0c;ComfyUI 推出了一套高级工具和节点系统&#xff0c;极大地简化了这一过程。本文将详细介绍这一工作流的各个组成部分以及其实用性。 工作流核心节点简…

使用腾讯云宝塔面板部署后端项目,包括MySQL,Redis,JDK,Maven

一、购买腾讯云服务器并配置 购买腾讯云的一个服务器服务后进入到如下页面&#xff0c;点击左侧栏服务器&#xff0c;然后点击“重装系统” 选择“使用应用面板”->“宝塔Linux面板”->填写自定义账号和密码->点击确认 二、配置宝塔服务器端口参数并启动 点击确认之…

2024年6月GSEP(C++)一级认证真题讲解

注意&#xff01;做题时长为2小时&#xff0c;孩子做完题目后对照讲解视频和讲解分析&#xff0c;针对薄弱点&#xff0c;进行有效的专项提高。 &#x1f451;讲解视频 &#xff08;暂无&#xff09; &#x1f451;讲解分析 1 单选题&#xff08;每题 2 分&#xff0c;共 3…

sqli-labs靶场通关攻略 46-50

主页有sqli-labs靶场通关攻略 1-45 第四六关 less-46 步骤一&#xff1a;利用报错注入查询库 ?sort1 and updatexml(1,concat(0x7e,database(),0x7e),1) 步骤二&#xff1a;查询表名 ?sort1 and updatexml(1,concat(0x7e,(select group_concat(table_name)from informatio…

WebSocket通信学习笔记

1 简介 WebSocket是一种全双工通信协议&#xff0c;它允许客户端和服务器之间建立持久化的双向连接&#xff0c;从而在不频繁创建HTTP请求的情况下进行实时数据传输。与传统的HTTP协议相比&#xff0c;WebSocket更适合需要实时数据更新的应用场景&#xff0c;如聊天应用、实时…

IDEA没有SQL语句提示

解决已经在IDEA连接数据库&#xff0c;但是写SQL语句不会提示列名、属性之类的 Mapper 映射没有 SQL 提示 设置中搜索&#xff0c;把方言改成 MySQL SQL Dialects