Python中Pandas常用函数及案例详解

Pandas是一个强大的Python数据分析工具库,它为Python提供了快速、灵活且表达能力强的数据结构,旨在使“关系”或“标签”数据的操作既简单又直观。Pandas的核心数据结构是DataFrame,它是一个二维标签化数据结构,可以看作是一个表格,其中可以存储不同类型的数据。

下面是Pandas中一些关于导入、导出、查看、检查、选取、清理、合并、统计等常用函数的详解以及案例说明:

第一、导入函数

Pandas 提供了多种方式来导入不同格式的数据。以下是一个详细的案例,展示如何使用 Pandas 从 CSV、JSON、Excel、SQL、URL 和剪贴板导入数据:

案例:从不同来源导入数据
步骤1:导入 Pandas 库

import pandas as pd

步骤2:从 CSV 文件导入数据

# 从 CSV 文件读取数据
csv_df = pd.read_csv('data.csv')# 查看 CSV 数据
print(csv_df)

步骤3:从 JSON 文件导入数据

# 从 JSON 文件读取数据
json_df = pd.read_json('data.json')# 查看 JSON 数据
print(json_df)

步骤 4:从 Excel 文件导入数据

# 从 Excel 文件读取数据
excel_df = pd.read_excel('data.xlsx', sheet_name='Sheet1')# 查看 Excel 数据
print(excel_df)

步骤 5:从 SQL 数据库导入数据

# 连接 SQL 数据库
conn = sqlite3.connect('example.db')
sql_df = pd.read_sql_query('SELECT * FROM table_name', conn)# 查看 SQL 数据
print(sql_df)

步骤 6:从 URL 导入数据

# 从 URL 读取数据
url_df = pd.read_csv('https://example.com/data.csv')# 查看 URL 数据
print(url_df)

步骤 7:从剪贴板导入数据

# 从剪贴板读取数据
clipboard_df = pd.read_clipboard()# 查看剪贴板数据
print(clipboard_df)

通过以上步骤,我们展示了如何使用 Pandas 从不同来源导入数据。Pandas 的 read_csv、read_json、read_excel、read_sql、read_csv 和 read_clipboard 函数分别用于从 CSV、JSON、Excel、SQL、URL 和剪贴板读取数据。这些函数具有多个参数,可以用来指定读取数据的详细选项,例如分隔符、表单名称、列类型等。导入数据后,我们可以使用 Pandas 的丰富功能对数据进行进一步的处理和分析。

第二、导出函数

在使用Pandas处理数据时,我们经常需要将处理后的数据导出到不同的格式,以便于其他数据分析工具使用或者进行数据的备份。Pandas支持多种数据格式导出,如CSV、Excel、HTML、JSON、HDF5等。
以下是一些常见格式的导出案例:

1. 导出到CSV文件

import pandas as pd# 创建一个DataFrame
df = pd.DataFrame({'A': [1, 2, 3],'B': [4, 5, 6],'C': [7, 8, 9]
})# 导出到CSV文件,如果文件不存在,将会被创建
df.to_csv('data.csv', index=False)  # index=False表示不将行索引作为单独的一列导出

2. 导出到Excel文件

# 同样先创建一个DataFrame
df = pd.DataFrame({'A': [1, 2, 3],'B': [4, 5, 6],'C': [7, 8, 9]
})# 导出到Excel文件,如果文件不存在,将会被创建
df.to_excel('data.xlsx', index=False)  # index=False表示不将行索引作为单独的一列导出

3. 导出到HTML文件

# 创建DataFrame
df = pd.DataFrame({'A': [1, 2, 3],'B': [4, 5, 6],'C': [7, 8, 9]
})# 导出到HTML文件,如果文件不存在,将会被创建
df.to_html('data.html', index=False)  # index=False表示不将行索引作为单独的一列导出

4. 导出到JSON文件

# 创建DataFrame
df = pd.DataFrame({'A': [1, 2, 3],'B': [4, 5, 6],'C': [7, 8, 9]
})# 将DataFrame转换为JSON格式,如果文件不存在,将会被创建
df.to_json('data.json', orient='split')  # orient='split'会使得导出的JSON格式更适合于DataFrame

5. 导出到HDF5文件

import pandas as pd# 创建一个DataFrame
df = pd.DataFrame({'A': [1, 2, 3],'B': [4, 5, 6],'C': [7, 8, 9]
})# 导出到HDF5文件,如果文件不存在,将会被创建
df.to_hdf('data.h5', key='df', mode='w')  # mode='w'表示写模式

第三、查看、检查数据

在Pandas中,查看和检查数据是数据处理的重要部分。以下是一些常用的方法来查看和检查DataFrame中的数据:

1. 使用head()和tail()查看数据的前几行和后几行

import pandas as pd# 创建一个DataFrame
df = pd.DataFrame({'A': [1, 2, 3, 4, 5],'B': [6, 7, 8, 9, 10],'C': [11, 12, 13, 14, 15]
})# 查看前5行数据
print(df.head())# 查看后5行数据
print(df.tail())

2. 使用info()查看基本信息

# 查看DataFrame的基本信息,如列数、行数、数据类型等
print(df.info())

3. 使用describe()查看统计信息

# 查看DataFrame的统计信息,包括计数、均值、标准差等
print(df.describe())

4. 使用memory_usage()查看内存使用情况

# 查看DataFrame的内存使用情况
print(df.memory_usage())

5. 使用shape属性查看形状

# 查看DataFrame的形状,即行数和列数
print(df.shape)

6. 使用isnull()和notnull()检查缺失值

# 检查DataFrame中的缺失值
print(df.isnull())# 检查DataFrame中没有缺失值
print(df.notnull())

7. 使用value_counts()查看值的分布

# 查看某一列中不同值的计数
print(df['A'].value_counts())

8. 使用unique()查看唯一值

# 查看某一列中唯一的出现的值
print(df['A'].unique())

9. 使用duplicated()检查重复值

# 检查DataFrame中的重复行
print(df.duplicated())# 检查DataFrame中没有重复行
print(~df.duplicated())

10. 使用sort_values()对数据进行排序

# 对某一列进行升序排序
print(df.sort_values(by='A'))# 对某一列进行降序排序
print(df.sort_values(by='A', ascending=False))

通过这些方法,可以快速地了解和检查DataFrame中的数据,帮助我们在进行数据处理之前对数据有一个基本的认识。

第四、数据选取

在Pandas中,数据选取是通过索引来实现对DataFrame或Series中数据的选择。索引可以是标签(label-based)或整数(integer-based)。以下是一些常用的数据选取方法:

1. 使用标签索引(Label-based Indexing)

import pandas as pd# 创建一个DataFrame
df = pd.DataFrame({'A': [1, 2, 3, 4, 5],'B': [6, 7, 8, 9, 10],'C': [11, 12, 13, 14, 15]
})# 使用列标签名称选取整列数据
print(df['A'])# 使用列标签名称和行标签选取单个值
print(df.loc[0, 'A'])# 使用行标签列表和列标签名称选取多个值
print(df.loc[[0, 2], ['A', 'C']])# 使用布尔索引选取满足条件的数据
print(df[df['A'] > 2])

2. 使用整数索引(Integer-based Indexing)

# 使用整数索引选取单个值
print(df.iloc[0])# 使用整数索引选取单个列
print(df.iloc[:, 0])# 使用整数索引和布尔索引选取满足条件的数据
print(df.iloc[df['A'] > 2, :])# 使用整数索引和切片选取数据
print(df.iloc[0:3, 1:3])

3. 使用行和列的混合格式索引

# 使用行列混合格式索引选取数据
print(df.loc[0:2, 'A':'C'])# 使用行列混合格式索引和布尔索引选取数据
print(df.loc[df['A'] > 2, 'A':'C'])

4. 使用at()和iat()选取单个值

# 使用`at()`根据行标签和列标签选取单个值
print(df.at[0, 'A'])# 使用`iat()`根据整数索引选取单个值
print(df.iat[0, 0])

5. 使用query()方法查询数据

# 使用`query()`方法查询满足条件的数据
print(df.query('A > 2'))

6. 使用xs()方法跨越多级索引选取数据

# 使用`xs()`方法选取某列或某行
print(df.xs(2, level='A'))  # 选取列标签为2的行
print(df.xs('B', axis=1))  # 选取列名称为B的列

7. 使用filter()方法根据条件选取数据

# 使用`filter()`方法根据条件选取数据
def is_even(x):return x % 2 == 0print(df.filter(items=['A', 'B'], like='e'))  # 选取列名包含'e'的列
print(df.filter(func=is_even, axis=0))  # 选取列中值为偶数的列

第五、数据清理

在Pandas中,数据清理是数据处理的重要步骤,它包括处理缺失值、异常值、重复值等。以下是一些常用的数据清理方法:

1. 处理缺失值

import pandas as pd# 创建一个包含缺失值的DataFrame
df = pd.DataFrame({'A': [1, 2, None, 4, 5],'B': [6, 7, 8, 9, None],'C': [11, None, 13, 14, 15]
})# 删除包含缺失值的行
df.dropna(inplace=True)# 填充缺失值,可以使用均值、中位数、众数等
df.fillna(df.mean(), inplace=True)# 向前填充缺失值
df.fillna(method='ffill', inplace=True)# 向后填充缺失值
df.fillna(method='bfill', inplace=True)

2. 处理异常值

# 使用Z-分数方法识别异常值(大于3或小于-3)
z_scores = df.apply(zscore)
abs_z_scores = np.abs(z_scores)
filtered_entries = (abs_z_scores < 3)
df = df[filtered_entries]# 使用IQR(四分位距)方法识别异常值
Q1 = df.quantile(0.25)
Q3 = df.quantile(0.75)
IQR = Q3 - Q1
df = df[~((df < (Q1 - 1.5 * IQR)) | (df > (Q3 + 1.5 * IQR))).any(axis=1)]

3. 处理重复值

# 检查重复值
print(df.duplicated())# 删除重复值
df.drop_duplicates(inplace=True)# 根据特定列删除重复值
df.drop_duplicates(subset='A', inplace=True)# 删除重复值,保留第一次出现的值
df.drop_duplicates(keep='first', inplace=True)# 删除重复值,保留最后一次出现的值
df.drop_duplicates(keep='last', inplace=True)

4. 数据类型转换

# 转换数据类型
df['A'] = df['A'].astype('int')
df['B'] = df['B'].astype('float')
df['C'] = df['C'].astype('str')

5. 重置索引

# 重置索引
df.reset_index(drop=True, inplace=True)

6. 缺失值分析

# 缺失值分析
missing_values = df.isnull().sum()
missing_percentage = df.isnull().mean() * 100
print(missing_values)
print(missing_percentage)

通过这些方法,可以有效地清理DataFrame中的数据,为后续的数据分析和工作准备干净、可靠的数据集。

第六、数据处理(Filter、Sort和GroupBy)

在Pandas中,Filter、Sort和GroupBy是处理数据的基本操作,它们可以帮助我们筛选数据、排序数据和分组数据。以下是一个详细的案例,展示如何使用这些操作:

案例:员工绩效数据分析
假设我们有一个DataFrame,其中包含了员工的姓名、部门、工资和绩效评分。我们想要根据绩效评分对员工进行排序,并筛选出绩效优秀的员工

步骤1:加载数据

import pandas as pd# 创建一个DataFrame
df = pd.DataFrame({'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],'Department': ['HR', 'Engineering', 'HR', 'Sales', 'Engineering'],'Salary': [70000, 90000, 60000, 80000, 100000],'Performance': [4.5, 3.5, 4.0, 2.5, 5.0]
})# 查看数据前几行
print(df.head())

步骤2:排序数据

# 根据绩效评分对数据进行降序排序
sorted_df = df.sort_values(by='Performance', ascending=False)# 查看排序后的数据
print(sorted_df)

步骤3:筛选数据

# 筛选绩效评分大于4的员工
filtered_df = df[df['Performance'] > 4]# 查看筛选后的数据
print(filtered_df)

步骤4:分组和聚合

# 根据部门对数据进行分组
grouped_df = df.groupby('Department')# 查看每个部门的平均工资和平均绩效评分
print(grouped_df.agg({'Salary': 'mean', 'Performance': 'mean'}))

步骤5:进一步筛选和排序

# 筛选绩效评分大于4且工资在60000到100000之间的员工
double_filtered_df = filtered_df[(filtered_df['Performance'] > 4) & (filtered_df['Salary'].between(60000, 100000))]# 根据绩效评分对筛选后的数据进行升序排序
double_sorted_df = double_filtered_df.sort_values(by='Performance', ascending=True)# 查看最终筛选和排序后的数据
print(double_sorted_df)

第七、数据合并

Pandas提供了多种方法来合并DataFrame,包括merge、concat、join等。以下是一个详细的案例,展示如何使用这些方法来合并不同的DataFrame:
案例:合并销售和库存数据

假设我们有两个DataFrame,一个包含销售数据,另一个包含库存数据。我们想要将这两个DataFrame合并为一个,以便进行综合分析。

步骤1:创建DataFrame

import pandas as pd# 创建销售DataFrame
sales_df = pd.DataFrame({'Product': ['Product A', 'Product B', 'Product C', 'Product D'],'Quantity': [100, 150, 200, 50],'Sale_Date': ['2023-01-01', '2023-01-02', '2023-01-03', '2023-01-04']
})# 创建库存DataFrame
inventory_df = pd.DataFrame({'Product': ['Product A', 'Product B', 'Product C', 'Product D'],'Stock_Level': [100, 200, 300, 0],'Last_Update': ['2023-01-01', '2023-01-02', '2023-01-03', '2023-01-04']
})

步骤2:使用merge合并数据

# 使用外连接合并销售和库存数据
merged_df = pd.merge(sales_df, inventory_df, on='Product', how='outer')# 查看合并后的数据
print(merged_df)

步骤3:使用concat合并数据

# 使用垂直堆叠合并销售和库存数据
combined_df = pd.concat([sales_df, inventory_df], axis=1)# 查看合并后的数据
print(combined_df)

步骤4:使用join合并数据

# 使用内连接合并销售和库存数据,只保留共有的键
joined_df = sales_df.join(inventory_df.set_index('Product'), how='inner')# 查看合并后的数据
print(joined_df)

步骤5:处理重复数据

# 删除重复的行
merged_df.drop_duplicates(inplace=True)# 查看删除重复数据后的数据
print(merged_df)

通过这个案例,我们展示了如何使用Pandas的merge、concat和join方法来合并不同的DataFrame。这些方法可以根据需要选择,以实现不同的合并效果。例如,merge适用于需要保留所有相关行的场景,concat适用于需要将数据垂直或水平堆叠的场景,而join适用于需要根据共有的键来合并数据的场景。此外,我们还展示了如何处理重复数据,以确保合并后的数据集是干净的。

第八、数据统计

Pandas提供了丰富的函数来对DataFrame进行统计分析。以下是一个详细的案例,展示如何使用这些函数来获取数据的基本统计信息:
案例:学生成绩数据分析
假设我们有一个DataFrame,其中包含了学生的姓名、课程分数和考试分数。我们想要对学生们的总分数和平均分数进行统计。

步骤1:创建DataFrame

import pandas as pd# 创建学生成绩DataFrame
scores_df = pd.DataFrame({'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],'Course_Score': [85, 90, 78, 88, 92],'Exam_Score': [90, 85, 88, 92, 80]
})# 查看数据前几行
print(scores_df.head())

步骤2:计算总分数和平均分数

# 计算每个学生的总分数
total_scores = scores_df[['Course_Score', 'Exam_Score']].sum(axis=1)# 计算每个学生的平均分数
average_scores = scores_df[['Course_Score', 'Exam_Score']].mean(axis=1)# 查看统计结果
print(total_scores)
print(average_scores)

步骤3:获取基本统计信息

# 获取所有列的基本统计信息
statistics = scores_df.describe()# 查看统计信息
print(statistics)

步骤4:计算标准差

# 计算每个学生分数的标准差
std_deviation = scores_df[['Course_Score', 'Exam_Score']].std(axis=1)# 查看标准差
print(std_deviation)

步骤5:计算中位数和四分位数

# 计算每个学生分数的中位数
median_scores = scores_df[['Course_Score', 'Exam_Score']].median(axis=1)# 计算每个学生分数的第一和第三四分位数
first_quartile = scores_df[['Course_Score', 'Exam_Score']].quantile(0.25, axis=1)
third_quartile = scores_df[['Course_Score', 'Exam_Score']].quantile(0.75, axis=1)# 查看中位数和四分位数
print(median_scores)
print(first_quartile)
print(third_quartile)

通过这个案例,我们展示了如何使用Pandas来获取学生成绩的基本统计信息,包括总分数、平均分数、标准差、中位数和四分位数。这些统计信息对于了解数据集的分布和特征非常重要,可以帮助我们做出更准确的数据分析和决策。

这些函数只是Pandas库中众多功能的一部分。Pandas强大的数据处理能力使其成为数据分析和机器学习领域中不可或缺的工具。在使用Pandas时,我们应当遵循良好的编程实践,确保代码的可读性和可维护性,同时注意数据处理过程中的隐私和安全性问题。

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

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

相关文章

04- 基于SpringAMQP封装RabbitMQ,消息队列的Work模型和发布订阅模型

SpringAMQP 概述 使用RabbitMQ原生API在代码中设置连接MQ的参数比较繁琐,我们更希望把连接参数写在yml文件中来简化开发 SpringAMQP是基于AMQP协议定义的一套API规范,将RabbitMQ封装成一套模板用来发送和接收消息 AMQP(Advanced Message Queuing Portocol)是用于在应用程序…

[CISCN2019 华东南赛区]Web11

模块注入题&#xff0c;这类题一般拥有固定的payload。 界面大概就是这么个样子 返回了IP地址&#xff0c;提示getip&#xff0c;xff等。 这是smarty模板。很明显了&#xff0c;这个模板存在xff处的命令执行。抓取数据包并添加字段 X-Forwarded-For:{{system(ls)}} cat /fla…

【Spring Boot 3】【Camel 4】动态路由

【Spring Boot 3】【Camel 4】动态路由 背景介绍开发环境开发步骤及源码工程目录结构总结背景 软件开发是一门实践性科学,对大多数人来说,学习一种新技术不是一开始就去深究其原理,而是先从做出一个可工作的DEMO入手。但在我个人学习和工作经历中,每次学习新技术总是要花费…

密码学——MAC

消息认证码 在信息发送和接收过程中,若攻击者能够得到信息,进行篡改,就能达到欺骗,诈骗,冒名顶替的作用。为了防止冒名诈骗,一个对策就是使用消息认证码——MAC: Message Authentication Code。 消息认证码,即确定消息真实性的认证程序。发件人将想要发送的信息和从哪个…

LeetCode18.四数之和

LeetCode19 四数之和 给你一个由 n 个整数组成的数组 nums &#xff0c;和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] &#xff08;若两个四元组元素一一对应&#xff0c;则认为两个四元组重复&#xff09;&am…

【视觉三维重建】【论文笔记】Deblurring 3D Gaussian Splatting

去模糊的3D高斯泼溅&#xff0c;看Demo比3D高斯更加精细&#xff0c;对场景物体细节的还原度更高&#xff0c;[官网]&#xff08;https://benhenryl.github.io/Deblurring-3D-Gaussian-Splatting/&#xff09; 背景技术 Volumetric rendering-based nerual fields&#xff1a…

linux sshd_config配置说明

[root01 ssh]# cat sshd_config #######################SSH Base Config################## #######通过OpenSSH工具入xshell连接默认端口 可以改成其他默认是22 PAM 认证过程 1&#xff09;使用者执行/usr/bin/passwd程序&#xff0c;并输入密码。 2&#xff09;passwd开…

有效的正方形(LeetCode 593)

文章目录 1.问题描述2.难度等级3.热门指数4.解题思路边长验证法等腰直角三角形验证法正方形定义 参考文献 1.问题描述 给定 2D 空间中四个点的坐标 p1, p2, p3 和 p4&#xff0c;如果这四个点构成一个正方形&#xff0c;则返回 true 。 点的坐标 pi 表示为 [xi, yi] 。 输入没…

【开源-土拨鼠充电系统】鸿蒙 HarmonyOS 4.0+微信小程序+云平台

本人自己开发的开源项目&#xff1a;土拨鼠充电系统 ✍GitHub开源项目地址&#x1f449;&#xff1a;https://github.com/cheinlu/groundhog-charging-system ✍Gitee开源项目地址&#x1f449;&#xff1a;https://gitee.com/cheinlu/groundhog-charging-system ✨踩坑不易&am…

192基于matlab的雷达信号进行RD图的仿真

基于matlab的雷达信号进行RD图的仿真&#xff0c;在距离进行匹配滤波&#xff0c;具体方法是与回波信号的FFT与参考信号对称共轭的FFT相乘&#xff0c;再IFFT。在多普勒维通过多普勒滤波器组进行滤波&#xff0c;相当于进行FFT。程序已调通&#xff0c;可直接运行。 192 matlab…

牛客小白月赛60-C-小竹关禁闭

很经典的dp问题 对于求解动态规划类的问题,关键就是阶段,状态,决策,状态转移方程 本题的核心点就是,怎么找到上一个状态 dp[i] max(dp[i -1],dp[i - k - 1] a[i]) 当前点不选,它的上一个状态就是i - 1 当前点如果选,它的上一个状态是i - k - 1 关键就是它对应的上一个状…

Elasticsearch:使用标记修剪提高文本扩展性能

作者&#xff1a;来自 Elastic Kathleen DeRusso 本博客讨论了 ELSER 性能的令人兴奋的新增强功能&#xff0c;该增强功能即将在 Elasticsearch 的下一版本中推出&#xff01; 标记&#xff08;token&#xff09;修剪背后的策略 我们已经详细讨论了 Elasticsearch 中的词汇和…

C#十大排序总结

一、冒泡排序 传送门 一、C#冒泡排序算法-CSDN博客 未完待续。。。

CS架构和BS架构

在软件开发领域&#xff0c;CS架构和BS架构是两种常见的架构模式&#xff0c;用于描述客户端和服务器之间的交互方式。这两种架构模式分别代表Client/Server架构和Browser/Server架构。 CS架构&#xff08;Client/Server架构&#xff09;&#xff1a; 客户端&#xff08;Client…

测试用例执行计划(100%用例) C卷(JavaPythonC++Node.jsC语言)

某个产品当前迭代周期内有N个特性({F1,F2,., })需要进行覆盖测试,每个特性都被评估了对应的优先级,特性使用其ID作为下标进行标识。 设计了M个测试用例({T1,T2.……,Tm}),每个用例对应了一个覆盖特性的集合,测试用例使用其ID作为下标进行标识,测试用例的优先级定义为其覆盖…

KY211 特殊排序

描述&#xff1a; 输入一系列整数&#xff0c;将其中最大的数挑出(如果有多个&#xff0c;则挑出一个即可)&#xff0c;并将剩下的数进行排序&#xff0c;如果无剩余的数&#xff0c;则输出-1。 输入描述&#xff1a; 输入第一行包括1个整数N&#xff0c;1<N<1000&#x…

公式排序算法实际运用

试想下这个么个场景&#xff1a;用户可以自己配置多个公式&#xff0c;公式与公式之间又有依赖关系。比如ABC &#xff0c;BCD。需要做个算法来排序这些公式。实际我们可以分为两个步骤来看这个问题。 1&#xff0c;配置的公式之间不能死循环依赖。比如ABC ,BAC。这种A依赖…

Landsat、哨兵等免费数据下载地址汇总

我们科研和一些工程化应用中&#xff0c;经常会用到免费的Landsat、哨兵1/2/3等数据。下面介绍常用的下载网址&#xff1a; 1.哨兵系列数据 哨兵系列数据在https://scihub.copernicus.eu/dhus 上简单注册一个用户就可以下载&#xff0c;就是速度慢点&#xff0c;还限制一个用…

如何查看并详细了解一个R包

查看并拆解一个R包&#xff0c;如ggplot2&#xff0c;是一种深入了解其功能和内部工作原理的好方法。这个过程可以帮助你更好地理解包的结构&#xff0c;使用方式&#xff0c;以及如何扩展或修改其功能以满足你的需求。以下是一些基本步骤和技巧&#xff0c;以ggplot2为例进行解…

vue2——new Vue({router,store, render: h => h(App) }).$mount(‘#app‘);分析

router render: h > h(App) 是下面内容的缩写&#xff1a; render: function (createElement) {return createElement(App); } 进一步缩写为(ES6 语法)&#xff1a; render (createElement) {return createElement(App); } 再进一步缩写为&#xff1a; render (h){retur…