Pandas入门篇(二)-------Dataframe篇4(进阶)(Dataframe的进阶用法)(机器学习前置技术栈)

news2024/10/6 22:33:24

目录

  • 概述
  • 一、复合索引
    • (一)创建具有复合索引的 DataFrame
      • 1. 使用 set_index 方法:
      • 2.在创建 DataFrame 时直接指定索引:
    • (二)使用复合索引进行数据选择和切片
    • (三)重置索引
    • (四)复合索引与分组操作
    • (五)unstack()函数
      • 1.参数
      • 2. 将多层索引转换为列
      • 2. 将列转换为行索引
      • 3. 分组聚合中的使用
    • 注意事项:
  • 二 、Dataframe分组语法进阶
    • (一)分组聚合多种写法
      • 1. 写法一:中括号形式, df[列名]
      • 2. 写法二:df.列名 直接实现.
      • 3. 写法三:结合 agg() 或者 aggregate()函数实现
      • 4. 写法四:还可以直接传入 numpy包下的 函数.
      • 5. 传入自定义函数
      • 6.agg 进行不同的聚合计算.
    • (二)分组转换(开窗+具体操作)
      • 1. 语法:
      • 2.常见用途
    • (三)分组过滤
      • 1.普通过滤:
      • 2. 分组后过滤
  • 四、透视表
    • (一)语法
    • (二)参数
    • (三)代码实现
  • 下篇内容

概述

经过前几篇的基础语法的学习,您已经掌握了Dataframe的基础操作。在掌握基础操作后,进一步探索其进阶用法能够让你更高效地处理和分析数据。
DataFrame的进阶用法涵盖了数据处理、探索、可视化和集成等多个方面。通过深入学习和实践,你将能够更充分地利用DataFrame的功能和优势,提升数据处理和分析的能力,为数据驱动的决策提供有力支持。(可视化将在matpoltlib中详细介绍)

一、复合索引

在 Pandas 中,DataFrame 的复合索引(也称为多级索引或层次化索引)允许在多个维度上对数据进行索引。这通常通过使用 MultiIndex 来实现,它可以通过多种方式创建,包括从多个列或数组、从元组列表等。复合索引特别有用于在数据集中表示多个分类变量,并允许进行高级的数据选择和聚合。

下面是一些关于如何在 Pandas 中使用 DataFrame 的复合索引的示例和解释:

(一)创建具有复合索引的 DataFrame

可以通过几种方式创建具有复合索引的 DataFrame:

1. 使用 set_index 方法:

可以从一个现有的 DataFrame 的列中创建复合索引。
代码实现:

import pandas as pd  
  
# 创建一个简单的 DataFrame  
df = pd.DataFrame({  
    'A': ['foo', 'foo', 'foo', 'bar', 'bar'],  
    'B': ['one', 'one', 'two', 'two', 'one'],  
    'C': ['small', 'large', 'large', 'small', 'small'],  
    'D': [1, 2, 2, 3, 3],  
    'E': [2, 4, 5, 5, 6]  
})  
  
# 从列 'A' 和 'B' 创建复合索引  
df_multiindex = df.set_index(['A', 'B'])  
df_multiindex

运行结果:
在这里插入图片描述

2.在创建 DataFrame 时直接指定索引:

在创建 DataFrame 时直接传递一个 MultiIndex。

# 创建多级索引  
index = pd.MultiIndex.from_tuples([('foo', 'one'), ('foo', 'two'), ('bar', 'one'), ('bar', 'two')])  
  
# 创建一个简单的 DataFrame,并使用多级索引  
df_multiindex = pd.DataFrame({  
    'C': ['small', 'large', 'large', 'small'],  
    'D': [1, 2, 2, 3],  
    'E': [2, 4, 5, 6]  
}, index=index)  
df_multiindex

运行结果:
在这里插入图片描述

(二)使用复合索引进行数据选择和切片

有了复合索引,可以使用它们来方便地选择数据。

# 选择索引为 ('foo', 'one') 的行  
print(df_multiindex.loc[('foo', 'one')])  
  
# 选择所有 'foo' 行的 'D' 列  
print(df_multiindex.loc['foo']['D'])  
  
# 选择 'foo' 下 'one' 和 'two' 的所有行  
print(df_multiindex.loc[('foo', slice(None))])

运行结果:
在这里插入图片描述

(三)重置索引

如果不再需要复合索引,或者想要将其转换回普通的列,可以使用 reset_index 方法。

# 重置索引,将复合索引的级别作为普通列添加回 DataFrame  
df_reset = df_multiindex.reset_index()  
df_reset

运行结果:
在这里插入图片描述

(四)复合索引与分组操作

复合索引与 groupby 方法结合使用时特别强大,因为它允许基于多个键对数据进行分组。

# 使用复合索引进行分组并计算每组的平均值  
grouped = df_multiindex.groupby(level=[0, 1]).mean()  
grouped

运行结果:
在这里插入图片描述

(五)unstack()函数

unstack()函数是用于将一个多级索引(multi-index)的DataFrame或Series从一个层级转换到列中,或者从列中转换到另一个层级。这通常用于数据重塑,使得数据的展现形式更符合分析的需要。
当DataFrame或Series具有一个或多个层级索引时,unstack()函数可以将低层级的索引转换为列标题,同时保持高层级索引作为行索引。反之,如果unstack()函数用于具有多层列标题的DataFrame,则可以将低层级的列标题转换为行索引。

1.参数

  • level:整数或字符串,可选参数。指定要解包的层级。如果省略此参数,将解包所有分层。通过指定level,你可以控制将哪一层级的索引横向展开,而其余层级的索引保持不变。

  • fill_value:可选参数。用于替换缺失值的值。在解包索引的过程中,可能会出现某些位置没有对应数据的情况,此时可以使用fill_value参数来指定一个默认值填充这些缺失位置。

  • dropna:布尔值,可选参数。指定是否删除那些只包含缺失值的列。当解包索引后,有些列可能全部为缺失值,通过设置dropna=True,可以自动删除这些列,使数据更加整洁。

2. 将多层索引转换为列

# 创建一个具有多层索引的 DataFrame  
index = pd.MultiIndex.from_product([['A', 'B'], ['one', 'two'], ['x', 'y', 'z']])  

data = pd.Series(np.random.randn(12), index=index)  
print(data)
df = data.unstack([0, 1])  
  
df

在这个示例中,我们创建了一个具有三层索引的Series对象,并使用unstack([0, 1])将前两层索引转换为列标题。
在这里插入图片描述

2. 将列转换为行索引

df
#%%
# 创建一个具有多层索引的DataFrame  
arrays = [np.array(['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux']),  
          np.array(['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']),  
          np.array(['small', 'large', 'large', 'small', 'small', 'large', 'large', 'small'])]  
  
# 将这些数组转换为MultiIndex  
index = pd.MultiIndex.from_arrays(arrays, names=('first', 'second', 'third'))  
  
# 创建一个简单的DataFrame  
df = pd.DataFrame(np.random.randn(8, 2), index=index, columns=['A', 'B'])  
  
print("原始DataFrame:")  
print(df)  
  
# 使用unstack将'third'层级的索引转换为列  
df_unstacked = df.unstack('third')  
  
print("\n使用unstack后的DataFrame:")  
df_unstacked

运行结果:
在这里插入图片描述
在这个示例中,我们创建了一个具有三层索引的DataFrame,并使用unstack(‘third’)将第三层索引(‘third’)转换为列。

3. 分组聚合中的使用

unstack() 可以用来将分组后的结果从层级索引的形式转换为更宽格式的表格。

# 创建一个示例 DataFrame  
data = {  
    'A': ['foo', 'foo', 'foo', 'bar', 'bar'],  
    'B': ['one', 'one', 'two', 'two', 'one'],  
    'C': ['small', 'large', 'large', 'small', 'small'],  
    'D': [1, 2, 2, 3, 3],  
    'E': [2, 4, 5, 5, 6]  
}  
df = pd.DataFrame(data)  
  
# 根据 A 和 B 列进行分组,并对 D 列求和  
grouped = df.groupby(['A', 'B']).sum()  
  
print("分组聚合后的结果:")  
print(grouped)  
  
# 使用 unstack() 将 B 列的层级索引转换为列  
unstacked = grouped.unstack('B')  
  
print("\n使用 unstack() 后的结果:")  
print(unstacked)

代码实现:
在这里插入图片描述

注意事项:

  • unstack()函数不会修改原始DataFrame或Series,而是返回一个新的对象。
  • 如果level参数指定的层级不存在,会引发KeyError。
  • 如果解包后的数据结构中存在重复的列标题,Pandas会保留所有的数据,并使用多级列标题来区分。

二 、Dataframe分组语法进阶

(一)分组聚合多种写法

首先我们先导入数据

import numpy as np
data = pd.read_csv('/export/data/pandas_data/gapminder.tsv',sep='\t')
data

数据样式:
在这里插入图片描述

1. 写法一:中括号形式, df[列名]

# 求不同洲的平均寿命
data.groupby('continent')['lifeExp'].mean()

运行结果:
在这里插入图片描述

2. 写法二:df.列名 直接实现.

# 写法2: df.列名 直接实现.
data.groupby('continent').lifeExp.mean()

运行结果:
在这里插入图片描述

3. 写法三:结合 agg() 或者 aggregate()函数实现

这两个函数完全一样, 并无任何区别.

# 写法3: 结合 agg() 或者 aggregate()函数实现, 这两个函数完全一样, 并无任何区别.
data.groupby('continent').lifeExp.agg('mean')         # 这个mean是 Pandas中的mean()函数, 要加: 引号包裹
data.groupby('continent').lifeExp.aggregate('mean')   

# 上述格式变形写法: {要操作的列1: 聚合函数, 要操作的列2: 聚合函数...}
data.groupby('continent').agg({'lifeExp':'mean'})        
data.groupby('continent').aggregate({'lifeExp':'mean'}) 

4. 写法四:还可以直接传入 numpy包下的 函数.

# 写法4: 还可以直接传入 numpy包下的 函数.
data.groupby('continent').lifeExp.agg(np.mean)            # 这里的np.mean是 Numpy中的mean()函数对象, 不要加引号
data.groupby('continent').agg({'lifeExp': np.mean}) 

5. 传入自定义函数

# 写法5: 传入自定义函数, 实现: 计算平均值. 
# 1. 自定义函数, 用于计算 某列值 的平均值.
def my_mean(col):
    # 该列平均值 = 该列数据和 / 该列数据个数 
    return col.sum() / col.size         # Series中: sum()函数, size: 属性

# 2. groupby分组聚合时, 可以传入: 自定义函数.
data.groupby('continent').lifeExp.agg(my_mean)            # 这里传入的是: 自定义函数对象, 不加引号.
data.groupby('continent').agg({'lifeExp': my_mean})    

运行结果:

6.agg 进行不同的聚合计算.

# 写法7: 分组后, 可以针对于 多列数据, 进行不同的聚合计算. 
# 需求: 根据年份分组, 计算: lifeExp(预期寿命)的平均值, pop(平均人口)的 最大值, gdpPercap(平均GDP) 的 中位数.
data.groupby('year').agg({'lifeExp': 'mean', 'pop': 'max', 'gdpPercap': 'median'})

运行结果:
在这里插入图片描述

(二)分组转换(开窗+具体操作)

transform()方法在Pandas库中是一个强大的工具,尤其在分组计算时。当对数据进行分组操作后,transform()方法允许对每个分组应用一个函数,并返回与原始DataFrame形状相同的结果。这对于在分组后进行标准化、填充缺失值、计算分组统计量等操作非常有用。

1. 语法:

当与groupby()结合使用时,transform()的语法基本保持不变:

grouped.transform(func, *args, **kwargs)

其中,grouped是一个通过groupby()方法得到的分组对象,func是你想要应用于每个分组的函数。

2.常见用途

  • 标准化:在每个分组内计算均值和标准差,然后用原始值减去均值并除以标准差,从而得到标准化的数据。
  • 填充缺失值:在每个分组内计算非缺失值的均值或中位数,并用这个值填充该分组内的缺失值。
    计算分组统计量:计算每个分组的均值、总和、最大值、最小值等,并将这些统计量广播回原始形状。
    示例:
    假设我们有一个包含销售数据的DataFrame,其中包含产品类别、销售额和利润等列,我们想要计算每个产品类别的销售额均值,并将这个均值填充到该类别下的每一行中:
# 创建一个简单的DataFrame  
df = pd.DataFrame({  
    'category': ['A', 'A', 'B', 'B', 'C', 'C'],  
    'sales': [100, 150, 75, 125, 50, 70],  
    'profit': [20, 30, 15, 25, 10, 14]  
})  
print('原表:')
print(df)
# 使用groupby和transform计算每组的销售额均值,并将结果广播回原始形状  
df['sales_mean_per_category'] = df.groupby('category')['sales'].transform('mean')  
print('转换之后的表:')
df

运行结果:
在这里插入图片描述

输出将是一个新的DataFrame,其中包含一个额外的列sales_mean_per_category,该列包含了每个产品类别的销售额均值,并且这个均值被填充到了该类别下的每一行中。

通过transform()方法,你可以轻松地在分组后对数据进行各种转换和操作,而无需改变原始数据的形状或结构。这使得它在数据清洗、预处理和特征工程等任务中非常有用。

(三)分组过滤

首先我们创建一个Dataframe

# 示例DataFrame  
import pandas as pd

df = pd.DataFrame({  
    'A': ['foo', 'foo', 'foo', 'bar', 'bar'],  
    'B': ['one', 'one', 'two', 'two', 'one'],  
    'C': ['small', 'large', 'large', 'small', 'small'],  
    'D': [1, 2, 2, 3, 3],  
    'E': [2, 4, 5, 5, 6]  
})  
df

运行结果:
在这里插入图片描述

1.普通过滤:

常见的是使用query或布尔索引来直接过滤DataFrame。

  • 使用query方法过滤:
# 选择列'D'的值大于2的行  
filtered_df = df.query('D > 2')  
filtered_df

运行结果:
在这里插入图片描述

  • 使用布尔索引过滤
# 选择列'D'的值大于2的行  
filtered_df = df[df['D'] > 2]  
filtered_df

运行结果:
在这里插入图片描述

2. 分组后过滤

分组后过滤组可用filter函数传入一个lambda函数或自定义函数,进行组的过滤

  • 传入lambda函数
# 查看按A分组的组内Dde平均值
c = df.groupby('A')[['D']].mean()
print(c)
# 过滤出按A分组的组内的平均值大于2的
df.groupby('A')['D'].filter(lambda x:x.mean()>2 )

运行结果:
在这里插入图片描述

  • 传入自定义函数
    注意,这里使用自定义函数的时候一定要return一个bool值,否则会报错
# 定义一个自定义函数,功能是guol出平均值大于2的
def my_func(col):
    if col.mean()>2:
        return True
    return False
df.groupby('A')['D'].filter(my_func) 

运行结果:
在这里插入图片描述
注意:
无论是apply函数还是transform函数还是filter函数,在传入一个自定函数的时候,只需要传入函数名,而非函数名+()

四、透视表

pivot_table函数是用于创建数据透视表(pivot table)的强大工具。数据透视表是一种可以对数据进行汇总、分析、探索和呈现的有效方式,它允许用户根据一个或多个键对数据进行重排,并对结果进行聚合运算。功能的同于excel的数据透视表相同。

(一)语法

pandas.pivot_table(data, values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All')

(二)参数

  • data: DataFrame
    要进行透视的数据源。通常是一个DataFrame对象。
  • values: list-like, optional
    要进行聚合计算的列名。如果不提供此参数,那么会使用所有数值型列。
  • index: list-like, optional
    用作透视表行索引的列名或列名列表。
  • columns: list-like, optional
    用作透视表列标签的列名或列名列表。
  • aggfunc: function, str, list, or dict, default ‘mean’
    聚合函数或函数列表,用于计算每个组(由index和columns定义)的聚合值。可以是’mean’, ‘sum’, ‘count’, ‘min’, ‘max’, ‘var’, 'std’等字符串,或者是一个自定义函数。如果传入一个函数列表,那么会返回一个多层级的列标签。
  • fill_value: scalar, default None
    用于填充缺失值的值。如果数据中没有缺失值,则此参数无效。
  • margins: bool, default False
    是否添加所有行/列的小计和总计。如果为True,则会在透视表的底部和右侧添加额外的行和列,显示聚合后的总计值。
  • dropna: bool, default True
    是否删除包含缺失值的行。如果为True,则任何在index或columns中包含缺失值的行都会被排除在外。
  • margins_name: str, default ‘All’
    边际(小计和总计)的名称。当margins=True时,此参数定义了总计行和列的名称。

(三)代码实现

  • 创建Dataframe表
import pandas as pd  
  
data = {  
    'year': [2020, 2020, 2021, 2021, 2021],  
    'product': ['A', 'B', 'A', 'B', 'C'],  
    'region': ['North', 'North', 'South', 'South', 'East'],  
    'sales': [100, 200, 150, 300, 50]  
}  
df = pd.DataFrame(data)
df

数据样式:
在这里插入图片描述

  • 基本透视表
# 每个商品每年的总的销售数量
pivot_table = df.pivot_table(values='sales', index='year', columns='product', aggfunc='sum')  
pivot_table

运行结果:
在这里插入图片描述

  • 使用多层索引和列
# 每个商品每年在每个地区的销售总量
pivot_table = df.pivot_table(values='sales', index=['year', 'region'], columns='product', aggfunc='sum')  
pivot_table 

运行结果:
在这里插入图片描述
在这个例子中,我们添加了region作为第二层索引。

  • 使用多个聚合函数
# 求每个产品,每年的销售总量和平均销售量
pivot_table = df.pivot_table(values='sales', index='year', columns='product', aggfunc=['sum', 'mean'])  
pivot_table

运行结果:
在这里插入图片描述
这里我们使用了两个聚合函数:sum和mean。这将产生一个多层级的列标签。

  • 填充缺失值
# 将缺失值填充为0
pivot_table = df.pivot_table(values='sales', index='year', columns='product', aggfunc='sum', fill_value=0)  
pivot_table

运行结果:
在这里插入图片描述
如果某些组合在数据中没有出现,则可以使用fill_value参数为这些缺失的组合填充一个默认值。

  • 添加边际
    margins=True会在透视表的底部和右侧添加所有行和列的小计。
pivot_table = df.pivot_table(values='sales', index='year', columns='product', aggfunc='sum', margins=True)  
pivot_table

运行结果:
在这里插入图片描述
通过调整index、columns和aggfunc等参数,你可以创建出各种复杂的数据透视表,以满足不同的数据分析需求。

下篇内容

Pandas的时间转换

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

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

相关文章

搜索引擎的设计与实现参考论文(论文 + 源码)

【免费】搜索引擎的设计与实现.zip资源-CSDN文库https://download.csdn.net/download/JW_559/89249705?spm1001.2014.3001.5501 搜索引擎的设计与实现 摘要: 我们处在一个大数据的时代,伴随着网络信息资源的庞大,人们越来越多地注重怎样才能…

土壤侵蚀分布数据、土壤侵蚀强度、土壤类型分布、降水量分布、坡度坡向数据、植被覆盖度、土地利用数据、土壤质地分布

引言 土壤侵蚀是指土壤或成土母质在外力作用下被破坏剥蚀、搬运和沉积的过程。土壤侵蚀强度是根据土壤侵蚀的实际情况,按轻微、中度、严重等分为不同级别。中国是世界上土壤侵蚀最严重的国家之一,主要发生在黄河中上游黄土高原地区、长江中上游丘陵地区和…

java面试(微服务)

SpringCloud五大组件 Nacos:注册中心Ribbon:负载均衡Feign:远程调用sentinel:服务熔断Gateway:网关 注册中心 Eureka Nacos 负载均衡 Ribbon负载均衡流程 Ribbon的负载均衡策略 RoundRobinRule:简单的…

2024五一杯数学建模B题思路代码文章教学-交通需求规划与可达率问题

交通需求规划与可达率问题 问题总结: 问题一:在一个小型交通网络中,给定的起点和终点之间的交通需求需分配到相应路径上。目标是最大化任意一条路段出现突发状况时的交通需求期望可达率。 问题二:在一个较大的交通网络中&#xff…

C++浮点数format时的舍入问题

C浮点数format时的舍入问题 首先有这样一段代码&#xff1a; #include <iostream> #include <stdio.h> using namespace std;int main() {cout << " main begin : " << endl;printf("%.0f \r\n", 1.5);printf("%.0f \r\n&…

ASP.NET通用作业批改系统设计

摘  要 该系统采用B/S结构&#xff0c;以浏览器方式登陆系统&#xff0c;用ASP.NET作为开发语言&#xff0c;数据库则使用Microsoft SQL Server 2000实现。《通用作业批改系统》包括了学生子系统、教师子系统、管理员子系统三大模块&#xff0c;该系统主要完成学生&#xff…

手撕spring框架(3)

手撕spring框架&#xff08;3&#xff09; 相关系列 手撕spring框架&#xff08;1&#xff09; 手撕spring框架&#xff08;2&#xff09; InitializingBean 接口详解 什么是 InitializingBean 接口&#xff1f; InitializingBean 接口是 Spring 框架中的一个接口&#xff0c…

Vue3管理系统-路由设置+表单校验

一、配置路由规则 1.在views 下创建文件夹分类,搭好架子 2.配置路由规则 在router下Index.js import { createRouter, createWebHistory } from vue-routerconst router createRouter({history: createWebHistory(import.meta.env.BASE_URL),routes: [//一级路由//这里可以…

GitLab服务器的搭建

GitLab服务器的搭建 为公司搭建一台代码托管服务器 服务器规格&#xff1a;2vCPUs4GiB20G 操作系统&#xff1a;RockyLinux8.8 下载软件 gitlab官网&#xff1a;http://about.gitlab.com 在官网下载比较麻烦&#xff0c;推荐从《清华大学开源软件镜像站》下载 清华大学开…

java线上问题排查之CPU使用率过高(一)【保姆级教程】

线上故障排查&#xff0c;主要包括CPU&#xff0c;磁盘&#xff0c;内存以及网络。基本上出问题就是 df、free、top 三连&#xff0c;然后依次 jstack、jmap df&#xff1a;用于显示文件系统的磁盘空间使用情况。 df -h&#xff1a;以人类可读的方式显示磁盘空间使用情况。 d…

微软如何打造数字零售力航母系列科普06 - 如何使用微软的Copilot人工智能

如何使用微软的Copilot人工智能&#xff1f; Copilot和ChatGPT有很多相似之处&#xff0c;但微软的聊天机器人本身就有一定的优势。以下是如何对其进行旋转&#xff0c;并查看其最引人注目的功能。 ​​​​​​​ &#xff08;资料来源&#xff1a;Lance Whitney/微软&…

前端素材库

大家好我是苏麟 , 今天推荐一个前端素材库 . 官网 : iconfont-阿里巴巴矢量图标库 这期就到这里 , 下期见!

WSL2-Ubuntu使用Conda配置百度飞浆paddlepaddle虚拟环境

0x00 缘起 本文将介绍在WSL2-Ubuntu系统中,使用Conda配置百度飞浆paddlepaddle虚拟环境中所出现的各种问题以及解决方法,最终运行"run_check()"通过测试。 在WSL2中配置paddlepaddle不像配置Pytorch那样顺滑,会出现各种问题(如:库的文件缺失、不知道如何匹配C…

Ps 滤镜:锐化

Ps菜单&#xff1a;滤镜/锐化 Filter/Sharpen “锐化”类滤镜一般都是通过增加相邻像素的对比度来达到锐化的目的。 请参阅&#xff1a; 《Ps&#xff1a;更好地进行锐化的建议》 较小范围的局部锐化&#xff0c;可尝试 Photoshop 工具箱里的“锐化工具”。 Photoshop 锐化类的…

ES与关系数据库的同步练习(hotel_admin)

目录 1 es与数据库同步的方法2 实践2.1 任务介绍2.2 MQ方面操作2.2.1 声明交换机队列并且绑定2.2.2 hotel_admin端web层设置mq发送消息2.3 hotel_demo端监听接受消息并执行es操作 1 es与数据库同步的方法 方式一&#xff1a;同步调用 优点&#xff1a;实现简单&#xff0c;粗…

【C++】学习笔记——string_4

文章目录 六、string类7. string类的模拟实现 未完待续 六、string类 7. string类的模拟实现 我们在上文简单实现了string类的构造函数。不知道大家有没有发现一个问题&#xff0c;我们在进行实现无参的构造函数时&#xff0c;初始化列表将 _str 初始化为 nullptr 了&#xf…

GAI工具哪家强?(ChatGPT 4 vs 文心一言)

开始之前&#xff0c; 先来看看 GAI和AI的区别和关系。 AI 和GAI AI 和GAI的概念 AI&#xff08;Artificial Intelligence&#xff09;是人工智能的缩写&#xff0c;是计算机科学的一个分支&#xff0c;旨在使机器像人类一样进行学习和思考。AI技术的研究领域包括机器人、语…

【Mac】Axure RP 9(交互原型设计软件)安装教程

软件介绍 Axure RP 9是一款强大的原型设计工具&#xff0c;广泛用于用户界面和交互设计。它提供了丰富的功能和工具&#xff0c;能够帮助设计师创建高保真的交互原型&#xff0c;用于展示和测试软件应用或网站的功能和流程。以下是Axure RP 9的主要特点和功能&#xff1a; 交…

基于t972 Android9 AP6256,如何在设置中添加5G热点选项,并使其正常打开

通过设置的的WiFi热点选项可以知道关键词“2.4GHz”&#xff0c;因此可以其全局搜索&#xff0c;在packages\apps\Settings\res\values\strings.xml文件下找到如下图所示&#xff0c; 从上面注释可以知道&#xff0c;选项按键选择2.4GHz触发的按键关键词是“wifi_ap_choose_2G…

9U_VPX信号处理机,传感器大数据异构计算平台

9U_VPX信号处理机 1 介绍 1.1 产品概述 9U_VPX信号处理机是一款面向前端射频系统的高速记录、存储和处理系统。信号处理机为应对军用电子信息系统面临的目标种类多样化、战场环境复杂化、执行任务多元化等多重难题&#xff0c;而研发出来的***数据记录存储系统。信号处理机担…