写点什么

【Pandas 学习笔记 02】- 数据处理高阶用法

  • 2021 年 12 月 01 日
  • 本文字数:2035 字

    阅读完需:约 7 分钟

作者:幻好

来源:恒生LIGHT云社区


Pandas 是一个 Python 软件库,它提供了大量能使我们快速便捷地处理数据的函数和方法。在本文将主要介绍 Pandas 的实用数据处理操作。

系列文章:

【Pandas 学习笔记 01】强大的分析结构化数据的工具集

【Pandas 学习笔记 02】处理数据实用操作

概述

Pandas 是基于 NumPy 构建的库,在数据处理方面可以把它理解为 NumPy 加强版,同时 Pandas 也是一项开源项目。它用于数据挖掘和数据分析,同时也提供数据清洗功能。


在本文中,主要介绍 Pandas 在数据处理中的高阶用法,包括:数据的合并、分组和拆分等用法。如果学过数据库的 SQL 语法,本文理解起来会非常快。

数据合并

数据准备

首先定义一个 DataFrame 数据集:


import pandas as pd
df_a = pd.DataFrame(columns=['name', 'rank'], data=[['C', 1], ['java', 2], ['python', 3], ['golang', 4]])df_b = pd.DataFrame(columns=['name', 'year'], data=[['java', 2020], ['python', 2021], ['golang', 2022]])
复制代码


通过 merge() 方法能对 DataFrame 数据集进行合并,通过内连接、外连接、左连接、右连接等方式,如下实例:


merge 方法默认是内连接取交集,通过 how 指定连接类型,on 指定连接字段


# 通过指定 columns 中的 name 内连接df_tmp = pd.merge(df_a, df_b, on='name', how='outer')print(df_tmp)
# ========打印======== name rank year0 java 2 20201 python 3 20212 golang 4 2022
复制代码


# 通过指定 columns 中的 name 左连接df_tmp = pd.merge(df_a, df_b, on='name', how='left')print(df_tmp)
# ========打印======== name rank year0 C 1 NaN1 java 2 2020.02 python 3 2021.03 golang 4 2022.0
复制代码


# 通过指定 columns 中的 name 右连接df_tmp = pd.merge(df_a, df_b, on='name', how='right')print(df_tmp)
# ========打印======== name rank year0 java 2 20201 python 3 20212 golang 4 2022
复制代码


# 如果合并两个 DataFrame 不含公共的 columns ,可以直接指定匹配的字段df_c = pd.DataFrame(columns=['name1', 'year'], data=[['java', 2020], ['python1', 2021], ['golang1', 2022]])df_tmp = pd.merge(df_a, df_c, left_on='name', right_on='name1')print(df_tmp)
# ========打印======== name rank name1 year0 java 2 java 2020
复制代码

数据分组

数据准备

首先定义一个 DataFrame 数据集:


import pandas as pd
df_a = pd.DataFrame(columns=['name', 'nums'], data=[['python', 1], ['java', 2], ['python', 3], ['java', 4]])
复制代码


通过 group() 方法能对 DataFrame 数据集进行分组操作,分组后还能进行求和、取平均值等操作,如下实例:


# 获取分组后的数据集中每个数据的数量df_tmp = df_a.groupby('name').size()print(df_tmp)
# ========打印========namejava 2python 2dtype: int64
复制代码


# 将分组后的数据集,根据 nums 字段进行求和df_tmp = df_a.groupby('name')['nums'].sum()print(df_tmp)
# ========打印========namejava 6python 4Name: nums, dtype: int64
复制代码


# 获取分组后的数据集的大小df_tmp = df_a.groupby('name').size()print(df_tmp)
# ========打印========namejava 3python 2Name: nums, dtype: int64
复制代码

数据拆分

数据准备

首先定义一个 DataFrame 数据集:


import pandas as pd
df_a = pd.DataFrame(columns=['name', 'rank'], data=[['C_no1', 1], ['java_no2', 2], ['python_no3', 3], ['golang', 4]])
复制代码


通过 split() 方法能对 DataFrame 数据集中某列数据进行拆分操作,如下实例:


# 数据拆分,对 columns 中的某列的数据某个符号匹配拆分,expand:为True可以直接将分列后的结果转换成DataFramedf_tmp = df_a['name'].str.split('_', 1, expand=True)print(df_tmp)
# ========打印======== 0 10 C no11 java no22 python no33 golang None
复制代码


# 数据拆分,对拆分后的数据再次与原数据合并df_tmp = pd.merge(df_a, df_a['name'].str.split('_', 1, expand=True), how='left', left_index=True, right_index=True)print(df_tmp)
# ========打印======== name rank 0 10 C_no1 1 C no11 java_no2 2 java no22 python_no3 3 python no33 golang 4 golang None
复制代码

数据可视化

在使用 Pandas 处理数据的过程中,为了更直观的展示数据的线性关系,我们可以引入 matplotlib 库将我们的数据变成相关图形


# plot() 方法生成相应的线性图形df_a = pd.DataFrame(columns=['name', 'rank'], data=[['C_no1', 1], ['java_no2', 2], ['python_no3', 3], ['golang', 4]])df_a.plot()
复制代码


3963

总结

本文主要介绍 Pandas 工具集的高阶操作,操作原理与数据库中的 SQL 有着异曲同工之妙,能够帮助我们解决日常数据的分析处理等操作。

发布于: 3 小时前阅读数: 6
用户头像

还未添加个人签名 2018.11.07 加入

还未添加个人简介

评论

发布
暂无评论
【Pandas学习笔记02】-数据处理高阶用法