数据分析 — Pandas 数据处理

目录

  • 一、简介
    • 1、概念
    • 2、特点
    • 3、引用
  • 二、数据结构
    • 1、Series
    • 2、DataFrame
  • 三、常见操作
    • 1、数据合并
    • 2、数据删除
    • 3、创建多层索引
    • 4、数据对齐
    • 5、排序
    • 6、DataFrame 和 Series 之间的运算
  • 四、应用

一、简介

1、概念

Pandas(Python Data Analysis Library)是一个基于 NumPy 的数据分析工具,专为解决数据分析任务而创建。它汇集了大量库和一些标准的数据模型,可以更高效地操作大型数据集。

2、特点

  • 数据结构: Pandas 提供了两种主要的数据结构,即 Series 和 DataFrame,用于处理一维和二维数据。
  • 标签化: 数据结构带有标签,可以通过标签进行轴向操作,提高了数据操作的灵活性。
  • 数据清洗: 提供了丰富的功能用于处理缺失值、重复项、异常值等,使数据更整洁。
  • 数据操作: 支持各种数据操作,包括合并、连接、分组、聚合等,满足多种数据分析需求。
  • 时间序列: 强大的时间序列处理功能,方便处理时间相关的数据。

3、引用

pip install pandas

import pandas as pd # 导入 Pandas 库并使用别名 pd

二、数据结构

1、Series

  • 基本属性

values:返回底层的 NumPy 数组,包含 Series 中的数据。

index:返回索引对象,提供标签信息,用于标识每个数据点。

dtype:返回数据的数据类型,表示 Series 中存储的元素类型。

shape:返回数据的形状,对于一维数据,返回的是单元素元组。

size:返回数据的元素个数,表示 Series 中包含的数据点的数量。

nbytes:返回数据的字节大小,即存储数据所需的字节数。

ndim:返回数据的维度,对于 Series 来说,始终为1。

name:返回或设置 Series 的名称,可以用于标识 Series 对象的用途或含义。

import pandas as pd  # 导入 Pandas 库并使用别名 pd# 创建一个 Series 对象
s = pd.Series([1, 2, 3, 4, 5], name='my_series')print(s.values)  # [1 2 3 4 5]
print(s.index)  # RangeIndex(start=0, stop=5, step=1)
print(s.dtype)  # int64
print(s.shape)  # (5,)
print(s.size)  # 5
print(s.nbytes)  # 40
print(s.ndim)  # 1
print(s.name)  # my_series
  • 创建
import pandas as pd  # 导入 Pandas 库并使用别名 pd
import numpy as np  # 导入 NumPy 库并使用别名 np# 从列表创建 Series
s1 = pd.Series([1, 2, 3, 4, 5])
print(s1)
# 0    1
# 1    2
# 2    3
# 3    4
# 4    5
# dtype: int64# 从字典创建 Series
s2 = pd.Series({'a': 1, 'b': 2, 'c': 3})
print(s2)
# a    1
# b    2
# c    3
# dtype: int64# 从 Numpy 数组创建 Series
s3 = pd.Series(np.array([1, 2, 3, 4, 5]))
print(s3)
# 0    1
# 1    2
# 2    3
# 3    4
# 4    5
# dtype: int32# 从字典和标签列表创建 Series
s4 = pd.Series({'a': 1, 'b': 2, 'c': 3}, index=['a', 'b', 'c'])
print(s4)
# a    1
# b    2
# c    3
# dtype: int64
  • 取值
import pandas as pd  # 导入 Pandas 库并使用别名 pd# 创建一个 Series 对象
s = pd.Series([1, 2, 3, 4, 5], index=['a', 'b', 'c', 'd', 'e'])# 通过索引取值
value = s['b']
print(value)  # 2# 通过切片取值
slice_values = s['a':'c']
print(slice_values)
# a    1
# b    2
# c    3
# dtype: int64# 取第二行
row_value = s.iloc[1]
print(row_value)  # 2

2、DataFrame

  • 基本属性

values:返回底层的 NumPy 数组,包含 DataFrame 中的数据。

columns:返回列名,表示 DataFrame 中每列的标签。

index:返回索引对象,提供标签信息,用于标识每行数据。

shape:返回数据的形状,是一个元组,表示DataFrame的行数和列数。

dtypes:返回每列的数据类型,表示 DataFrame 中存储的元素类型。

size:返回数据的元素个数,表示 DataFrame 中包含的数据点的总数量。

import pandas as pd  # 导入 Pandas 库并使用别名 pd# 创建一个 DataFrame 对象
data = {'name': ['Tom', 'Nick', 'John'], 'Age': [20, 21, 19]}
df = pd.DataFrame(data)print(df.columns)  # Index(['name', 'Age'], dtype='object')print(df.index)  # RangeIndex(start=0, stop=3, step=1)print(df.values)
# [['Tom' 20]
#  ['Nick' 21]
#  ['John' 19]]print(df.shape)  # (3, 2)print(df.dtypes)
# name    object
# Age      int64
# dtype: objectprint(df.size)  # 6
  • 创建
import pandas as pd  # 导入 Pandas 库并使用别名 pd
import numpy as np  # 导入 NumPy 库并使用别名 np# 创建一个字典
data = {'name': ['Tom', 'Nick', 'John', 'Tom'], 'Age': [20, 21, 19, 18]}
# 从字典创建 DataFrame
df = pd.DataFrame(data)
print(df)
#    name  Age
# 0   Tom   20
# 1  Nick   21
# 2  John   19
# 3   Tom   18# 创建一个列表
data = [['Tom', 20], ['Nick', 21], ['John', 19], ['Tom', 18]]
# 从列表创建 DataFrame,指定列为'name'和'Age'
df = pd.DataFrame(data, columns=['name', 'Age'])
print(df)
#    name  Age
# 0   Tom   20
# 1  Nick   21
# 2  John   19
# 3   Tom   18# 创建一个二维数组
data = np.array([['Tom', 20], ['Nick', 21], ['John', 19], ['Tom', 18]])
# 从二维数组创建 DataFrame,指定列为'name'和'Age'
df = pd.DataFrame(data, columns=['name', 'Age'])
print(df)
#    name Age
# 0   Tom  20
# 1  Nick  21
# 2  John  19
# 3   Tom  18# 创建一个 DataFrame,然后使用该 DataFrame 创建另一个 DataFrame
df1 = pd.DataFrame({'name': ['Tom', 'Nick', 'John'], 'Age': [20, 21, 19]})
df2 = pd.DataFrame(df1['name'], columns=['name'])  # 使用 df1 的一个列创建新的 DataFrame
print(df2)
#    name
# 0   Tom
# 1  Nick
# 2  John# 添加一行
new_row = {'name': 'Alex', 'Age': 22}
# 使用 concat 方法将新行添加到 DataFrame,ignore_index=True 用于重置索引
df = pd.concat([df, pd.DataFrame([new_row])], ignore_index=True)
print(df)
#    name Age
# 0   Tom  20
# 1  Nick  21
# 2  John  19
# 3   Tom  18
# 4  Alex  22
  • 取值
import pandas as pd  # 导入 Pandas 库并使用别名 pd# 创建一个 DataFrame
data = {'Name': ['Tom', 'Nick', 'John', 'Peter'],'Age': [20, 21, 19, 18],'Score': [85, 80, 90, 88]}
df = pd.DataFrame(data)# 通过列标签取值
# 选取单列
print(df['Name'])
# 0      Tom
# 1     Nick
# 2     John
# 3    Peter
# Name: Name, dtype: object# 选取多列
print(df[['Name', 'Age']])
#     Name  Age
# 0    Tom   20
# 1   Nick   21
# 2   John   19
# 3  Peter   18# 通过标签索引取值
# 设置行标签并选取行
df.index = ['Student1', 'Student2', 'Student3', 'Student4']
print(df.loc['Student1'])
# Name     Tom
# Age       20
# Score     85
# Name: Student1, dtype: object# 通过位置取值
# 选取第一行(索引为0)
print(df.iloc[0])
# Name     Tom
# Age       20
# Score     85
# Name: Student1, dtype: object# 使用布尔索引取值
# 选取年龄大于20的行
print(df[df['Age'] > 20])
#           Name  Age  Score
# Student2  Nick   21     80
  • 修改 index、columns
import pandas as pd  # 导入 Pandas 库并使用别名 pddata = {'name': ['Tom', 'Nick', 'John'], 'Age': [20, 21, 19]}
df = pd.DataFrame(data)
print(df)
#    name  Age
# 0   Tom   20
# 1  Nick   21
# 2  John   19df.index = ['name', 'Age', 'height']
df.columns = ['Name', 'Age']
print(df)
#         Name  Age
# name     Tom   20
# Age     Nick   21
# height  John   19
  • 筛选
import pandas as pd  # 导入 Pandas 库并使用别名 pd
import numpy as np  # 导入 NumPy 库并使用别名 np# 创建一个字典
data = {'name': ['Tom', 'Nick', 'John', 'Tom'], 'Age': [20, 21, 19, 18]}
# 从字典创建 DataFrame
df = pd.DataFrame(data)
print(df)
#    name  Age
# 0   Tom   20
# 1  Nick   21
# 2  John   19
# 3   Tom   18# 根据条件筛选数据
filtered_df = df[df['Age'] > 20]
print(filtered_df)
#    name  Age
# 1  Nick   21

三、常见操作

1、数据合并

  • concat

用于沿着一条轴(通常是行轴)连接两个或更多的对象。它不会改变轴标签。默认情况下,concat 沿着行方向(axis=0)连接对象。

import pandas as pd  # 导入 Pandas 库并使用别名 pd# 创建两个 DataFrame
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2'],'B': ['B0', 'B1', 'B2'],'C': ['C0', 'C1', 'C2'],'D': ['D0', 'D1', 'D2']},index=[0, 1, 2])df2 = pd.DataFrame({'A': ['A3', 'A4', 'A5'],'B': ['B3', 'B4', 'B5'], 'C': ['C3', 'C4', 'C5'],'D': ['D3', 'D4', 'D5']},index=[3, 4, 5])result = pd.concat([df1, df2])
print(result)
#     A   B   C   D
# 0  A0  B0  C0  D0
# 1  A1  B1  C1  D1
# 2  A2  B2  C2  D2
# 3  A3  B3  C3  D3
# 4  A4  B4  C4  D4
# 5  A5  B5  C5  D5
  • join

DataFrame 中的 join 方法用于将两个 DataFrame 连接在一起,连接是基于索引(行标签)进行的。

import pandas as pd  # 导入 Pandas 库并使用别名 pd# 创建两个 DataFrame
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2'],'B': ['B0', 'B1', 'B2']},index=[0, 1, 2])df2 = pd.DataFrame({'C': ['C0', 'C1', 'C2'],'D': ['D0', 'D1', 'D2']},index=[0, 1, 2])result = df1.join(df2, how='inner')  # how='inner' 表示内连接,即只保留两个 DataFrame 中都有数据的行
print(result)
#     A   B   C   D
# 0  A0  B0  C0  D0
# 1  A1  B1  C1  D1
# 2  A2  B2  C2  D2
  • merge

用于将两个 DataFrame 沿着一个或多个键(可以是行或列标签)进行连接,允许指定连接的键,可以进行左连接、右连接或外连接。

import pandas as pd  # 导入 Pandas 库并使用别名 pd# 创建两个 DataFrame
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2'],'B': ['B0', 'B1', 'B2']},index=[0, 1, 2]) df2 = pd.DataFrame({'C': ['C0', 'C1', 'C2'],'D': ['D0', 'D1', 'D2']},index=[0, 1, 3])# left_index=True 表示进行左连接,即保留 df1 中的所有行,右连接同理。
# 默认情况下,两个 DataFrame 的索引都会被保留下来。
# 如果不想保留某个 DataFrame 的索引,可以使用 how='inner' 或 how='outer' 进行内连接或外连接。
result = pd.merge(df1, df2, left_index=True, right_index=True)  
print(result)
#     A   B   C   D
# 0  A0  B0  C0  D0
# 1  A1  B1  C1  D1

2、数据删除

pandas.drop(labels=None, axis=0, index=None, columns=None, level=None, inpl
ace=False, errors='raise')

参数说明:

labels:要删除的行或列的标签。

axis:删除行还是列,0 或 ‘index’ 代表行,1 或 ‘columns’ 代表列。

index:要删除的行的索引。

columns:要删除的列的标签。

level:用于多层次索引(MultiIndex)的级别。

inplace:是否在原地修改 DataFrame。如果是 True,则直接在原 DataFrame 上进行修改,否则返回一个新的 DataFrame。

errors:如果尝试删除不存在的标签会引发什么错误,‘raise’ 表示引发错误,‘ignore’ 表示忽略。

import pandas as pd  # 导入 Pandas 库并使用别名 pd# 创建 DataFrame
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]})
print(df)
#    A  B  C
# 0  1  4  7
# 1  2  5  8
# 2  3  6  9df.drop(columns='A', inplace=True)
print(df)
#    B  C
# 0  4  7
# 1  5  8
# 2  6  9

3、创建多层索引

使用 pd.MultiIndex.from_arrays() 方法创建多级索引对象。该方法接受两个列表作为参数,分别表示索引的级别。

import pandas as pd  # 导入 Pandas 库并使用别名 pdindex = pd.MultiIndex.from_arrays([['A', 'A', 'B', 'B'], [1, 2, 1, 2]], names=['letters', 'numbers'])
df = pd.DataFrame({'col1': [10, 20, 30, 40]}, index=index)
print(df)
#                  col1
# letters numbers
# A       1          10
#         2          20
# B       1          30
#         2          40result = df.loc['A']  # 选择第一级索引为 'A' 的数据
print(result)
#          col1
# numbers
# 1          10
# 2          20result = df.loc[('A', 2)]  # 选择第一级索引为 'A',第二级索引为 2 的数据
print(result)
# col1    20
# Name: (A, 2), dtype: int64

4、数据对齐

import pandas as pd  # 导入 Pandas 库并使用别名 pd# 创建两个 Series 对象
s1 = pd.Series([1, 2, 3])
s2 = pd.Series([4, 5, 6])# 算术运算
add_result = s1 + s2
print(add_result)
# 0    5
# 1    7
# 2    9
# dtype: int64sub_result = s1 - s2
print(sub_result)
# 0   -3
# 1   -3
# 2   -3
# dtype: int64mul_result = s1 * s2
print(mul_result)
# 0     4
# 1    10
# 2    18
# dtype: int64div_result = s1 / s2
print(div_result)
# 0    0.25
# 1    0.40
# 2    0.50
# dtype: float64

5、排序

import pandas as pd  # 导入 Pandas 库并使用别名 pd# 创建一个 DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie'],'Age': [25, 30, 22],'Score': [90, 85, 88]}
df = pd.DataFrame(data)# 显示原始 DataFrame
print(df)
#       Name  Age  Score
# 0    Alice   25     90
# 1      Bob   30     85
# 2  Charlie   22     88# 根据 'Score' 列的值进行排序
df_sorted_by_score = df.sort_values(by='Score', ascending=False)
print(df_sorted_by_score)
#       Name  Age  Score
# 0    Alice   25     90
# 2  Charlie   22     88
# 1      Bob   30     85# 根据索引进行排序
df_sorted_by_index = df.sort_index(ascending=False)
print(df_sorted_by_index)
#       Name  Age  Score
# 2  Charlie   22     88
# 1      Bob   30     85
# 0    Alice   25     90

6、DataFrame 和 Series 之间的运算

import pandas as pd  # 导入 Pandas 库并使用别名 pd# 创建一个 DataFrame 和一个 Series
df = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
series = pd.Series([5, 6], index=['A', 'B'])# 加法运算
add_result = df + series
print(add_result)
#    A   B
# 0  6   9
# 1  7  10# 减法运算
subtract_result = df - series
print(subtract_result)
#    A  B
# 0 -4 -3
# 1 -3 -2# 乘法运算
multiply_result = df * series
print(multiply_result)
#     A   B
# 0   5  18
# 1  10  24# 除法运算
divide_result = df / series
print(divide_result)
#      A         B
# 0  0.2  0.500000
# 1  0.4  0.666667

四、应用

爬取天气数据并保存为 DataFrame 格式

import pandas as pd  # 导入 pandas 库,用别名 pd
import requests  # 导入 requests 模块,用于发送 HTTP 请求
from lxml import etree  # 导入 lxml 中的 etree 模块,用于处理和解析 XML 数据# 定义目标网址
url = 'https://weather.cma.cn/'
# 定义请求头,模拟浏览器访问
header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36'
}
# 发送 HTTP GET 请求获取页面内容
res = requests.get(url, headers=header)
# 将获取的页面内容解码成 UTF-8 格式
content = res.content.decode('utf-8')
# 使用 etree.HTML 解析 HTML 内容
tree = etree.HTML(content)
# 从 HTML 树中提取所有 id 为 "HOT" 的 div 下的 a 标签
a_s = tree.xpath('//div[@id="HOT"]/a')# 创建一个空列表用于存储提取的数据
lst = []
# 遍历除第一个外的所有 a 标签
for a in a_s[1:]:# 创建一个空字典用于存储当前城市的信息dic = {}# 提取当前城市的排名信息,并去除首尾空格dic['排名'] = a.xpath('./div[@class="rank"]/text()')[0].strip()# 提取当前城市的名称信息,并去除首尾空格dic['城市'] = a.xpath('./div[@class="sname"]/text()')[0].strip()# 提取当前城市所属省份的信息,并去除首尾空格dic['省份'] = a.xpath('./div[@class="pname"]/text()')[0].strip()# 提取当前城市的最高温度信息,并去除首尾空格dic['最高温度'] = a.xpath('./div[@class="value"]/text()')[0].strip()# 将当前城市的信息字典添加到列表中lst.append(dic)
# 打印最终提取的城市信息列表
print(lst)
# [{'排名': '1', '城市': '昌江', '省份': '海南', '最高温度': '29.9℃'}, {'排名': '2', '城市': '景洪', '省份': '云南', '最高温度': '29.7℃'}, {'排名': '3', '城市': '勐腊', '省份': '云南', '最高温度': '29℃'}, {'排名': '4', '城市': '保亭', '省份': '海南', '最高温度': '28.9℃'}, {'排名': '5', '城市': '乐东', '省份': '海南', '最高温度': '28.9℃'}, {'排名': '6', '城市': '白沙', '省份': '海南', '最高温度': '28.3℃'}, {'排名': '7', '城市': '巧家', '省份': '云南', '最高温度': '28.2℃'}, {'排名': '8', '城市': '东川', '省份': '云南', '最高温度': '28.1℃'}, {'排名': '9', '城市': '儋州', '省份': '海南', '最高温度': '27.7℃'}, {'排名': '10', '城市': '番禺', '省份': '广东', '最高温度': '27.6℃'}]# 使用提取的数据创建 DataFrame
df = pd.DataFrame(lst)
# 打印 DataFrame
print(df)
#    排名  城市  省份   最高温度
# 0   1  昌江  海南  29.9℃
# 1   2  景洪  云南  29.7℃
# 2   3  勐腊  云南    29℃
# 3   4  保亭  海南  28.9℃
# 4   5  乐东  海南  28.9℃
# 5   6  白沙  海南  28.3℃
# 6   7  巧家  云南  28.2℃
# 7   8  东川  云南  28.1℃
# 8   9  儋州  海南  27.7℃
# 9  10  番禺  广东  27.6℃

记录学习过程,欢迎讨论交流,尊重原创,转载请注明出处~

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

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

相关文章

前端秘法进阶篇之事件循环

目录 一.浏览器的进程模型 1.进程 2.线程 二.浏览器的进程和线程 1. 浏览器进程 2. 网络进程 3. 渲染进程 三.渲染主线程 四.异步 五.优先级 1. 延时队列: 2.交互队列: 3.微队列: 六.JS 的事件循环 附加:JS 中的计时器能做到精…

java 宠物在线商城系统Myeclipse开发mysql数据库web结构jsp编程servlet计算机网页项目

一、源码特点 java 宠物在线商城系统是一套完善的java web信息管理系统 servletdaobean mvc模式,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S 模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&…

性能测试监控指标及分析调优

目录 一、哪些因素会成为系统的瓶颈? 1.1 CPU 1.2 内存 1.3 磁盘 I/O 1.4 网络 1.5 数据库 二、哪些指标做为衡量系统的性能 2.1 TPS 吞吐量 2.1.1 磁盘吞吐量 2.1.2 网络吞吐量 2.2 资源使用率 2.2.1 CPU 使用率 2.2.2 内存使用率 2.2.3 磁盘 I/O …

10.什么是 JavaScript 中的包装类型

在 JavaScript 中,基本类型是没有属性和方法的,但是为了便于操作基本类型的值,在调用基本类型的属性或方法时 JavaScript 会在后台隐式地将基本类型的值转换为对象,如: const a "abc"; a.length; // 3 a.t…

open ai api 国内配置代理指南(网上最全)

1.配置须知 open ai 作为这一波AI浪潮的推动者,opne ai的gpt 系列产品在使用和体验上绝对是最强大的,现在对于开发者来说要在代码中访问open ai api是不可用的。所以本文就主要解决这个问题。我们要了解open ai 的网站gpt的访问和api的访问收费是分开来…

配置Juniper虚墙vSRX基于策略的IPsec VPN(WEB方式)

正文共:1444 字 18 图,预估阅读时间:2 分钟 关于IPsec VPN,我们已经有一个合集了(IPsec VPN)。之前接触比较多的是H3C的IPsec VPN,后来接触的厂家多了,才发现大家的模型或者叫法还是…

数据卷的常见命令,如何创建Nginx容器,修改nginx容器内的html目录下的index.html文件

数据卷 什么是数据卷 数据卷(volume)是一个虚拟目录,是容器内目录与宿主机**目录**之间映射的桥梁。 以Nginx为例,我们知道Nginx中有两个关键的目录: html:放置一些静态资源 conf:放置配置文…

文心一言4.0 VS ChatGPT4.0哪家强?!每月60块的文心一言4.0值得开吗?

大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,所以创建了“AI信息Gap”这个公众号,专注于分享AI全维度知识…

Python在手机芯片

Python在手机芯片的智能化芯片研发开发中具有重要性。首先,Python作为一种高级编程语言,具有简洁、易读、易写的特点,使得芯片开发人员能够更加快速地编写和调试代码。这对于芯片研发过程中的迭代和优化至关重要。 其次,Python拥…

微服务设计:Spring Cloud 链路追踪概述

Spring Cloud 链路追踪是指在分布式系统中追踪请求路径的技术。它可以帮助开发者了解请求在各个微服务之间是如何流转的,以及每个微服务处理请求所花费的时间。链路追踪可以用于解决以下问题: 性能分析: 识别性能瓶颈,优化微服务性能。故障排…

AI短视频一键换脸小程序源码/带流量主

微信云开发AI一键视频换脸小程序源码是由极客二改后发布的,小程序增加了广告控制,插屏广告,激励广告和原生广告,由于采用了微信云开发没有后台,所以不需要域名和服务器也可以正常搭建使用,所有的配置都可以…

C++,stl,函数对象,谓词,内建函数对象

目录 1.函数对象使用 2.谓词 1.一元谓词 2.二元谓词 3.内建函数对象 1.算术仿函数 2.关系仿函数 3.逻辑仿函数 1.函数对象使用 #include<bits/stdc.h> using namespace std;class add { public:int operator()(int v1,int v2){return v1 v2;} };class print { p…

comfyui视频转绘学习笔记

算法方案 ComfyUIAnimateDiffcontrolnet 目录 依赖项&#xff1a; 楚门的ai世界 森森star AI_空杯心_47 依赖项&#xff1a; AnimateDiff for ComfyUI 需要去github下载模型 ComfyUI-Impact-Pack git clone https://github.com/ltdrdata/ComfyUI-Impact-Pack.git htt…

【Java中文乱码浅析及解决方案——详细讲解】

Java中文乱码浅析及解决方案 1. 介绍2. 原因分析3. 解决方案4. 环境配置5. 测试 1. 介绍 Java中文乱码通常发生在字符串在不同编码之间转换时&#xff0c;导致编码与解码使用的字符集不一致&#xff0c;或者是平台默认编码与数据的实际编码不一致&#xff0c;这可能在文件读写…

MyBatis之Like模糊查询的两种实现方式

MyBatis之Like模糊查询的两种方式 文章目录 MyBatis之Like模糊查询的两种方式1. Mybatis中Like模糊查询1. 传递参数值时直接拼接%%2. Mapper.xml中绑定标签 1. Mybatis中Like模糊查询 有两种方式&#xff1a; 在Java代码中传递参数值时直接拼接 %%mapper.xml中利用数据库内置拼…

从C向C++8——多态

一.多态基础 面向对象程序设计语言有封装、继承和多态三种机制&#xff0c;这三种机制能够有效提高程序的可读性、可扩充性和可重用性。 “多态&#xff08;polymorphism&#xff09;”指的是同一名字的事物可以完成不同的功能。多态可以分为编译时的多态和运行时的多态。前者主…

Unity(单元测试)在STM32上的移植与应用

概述 Unity Test是一个为C构建的单元测试框架。本文基于STM32F407为基础&#xff0c;完全使用STM32CubeIDE进行开发&#xff0c;移植和简单使用Unity。 单片机型号&#xff1a;STM32F407VET6 软件&#xff1a;STM32CubeIDE Version: 1.14.1 Unity Version&#xff1a;2.…

儿童护眼台灯哪个值得推荐?推荐专业的儿童护眼台灯

现在的孩子很多都存在视力问题&#xff0c;而且年龄也越来越早&#xff0c;不少还为上学的孩子都早已戴上小眼镜。虽说这可能存在家族近视遗传的可能性&#xff0c;不过更多的还是后天导致的。长时间玩耍电子产品、缺乏运动、不良用眼习惯、不合适的光线等等都是导致孩子近视的…

【JavaScript 教程】

JavaScript 教程 JavaScript 在线实例为什么学习 JavaScript? JavaScript 是 Web 的编程语言。 所有现代的 HTML 页面都可以使用 JavaScript。 JavaScript 非常容易学。 JavaScript 在线实例 <!DOCTYPE html> <html> <head> <meta charset"utf-8&q…

23款奔驰S400商务版没有后排电动座椅那改装一套跟选装有区别吗

改装的后排电动座椅通常提供以下功能&#xff1a; 电动调节&#xff1a;座椅可以通过按钮或控制面板进行前后调节&#xff0c;以适应乘客的腿部空间需求。 靠背角度调节&#xff1a;乘客可以通过电动调节功能来调整座椅的靠背角度&#xff0c;以获得更舒适的坐姿。 座椅倾斜调…