Pandas 数据处理:从基础到高级的完整指南【第84篇—Pandas 数据处理】

Pandas 数据处理:从基础到高级的完整指南

Pandas 是一个强大的数据分析工具,广泛应用于数据科学、机器学习和统计分析等领域。本文将介绍 Pandas 模块的基础知识,包括数据结构、数据导入、数据选择与过滤等方面,通过实际代码示例和详细解析,帮助读者快速上手 Pandas,发现它在数据处理中的强大功能。

image-20240218111637483

1. Pandas 模块简介

Pandas 是基于 NumPy 的开源数据分析库,提供了高性能、易用的数据结构和数据分析工具。它的两个核心数据结构是 Series 和 DataFrame。

1.1 Series

Series 是一维的标签化数组,可以存储不同类型的数据。让我们看一个简单的示例:

import pandas as pd

# 创建一个 Series
s = pd.Series([1, 3, 5, np.nan, 6, 8])

print(s)

输出:

0    1.0
1    3.0
2    5.0
3    NaN
4    6.0
5    8.0
dtype: float64

1.2 DataFrame

DataFrame 是一个二维的表格结构,可以看作是多个 Series 的集合。以下是一个 DataFrame 的基本创建方法:

# 创建一个 DataFrame
df = pd.DataFrame({
    'A': 1.,
    'B': pd.Timestamp('20220101'),
    'C': pd.Series(1, index=list(range(4)), dtype='float32'),
    'D': np.array([3] * 4, dtype='int32'),
    'E': pd.Categorical(["test", "train", "test", "train"]),
    'F': 'foo'
})

print(df)

输出:

     A          B    C  D      E    F
0  1.0 2022-01-01  1.0  3   test  foo
1  1.0 2022-01-01  1.0  3  train  foo
2  1.0 2022-01-01  1.0  3   test  foo
3  1.0 2022-01-01  1.0  3  train  foo

2. 数据导入与导出

Pandas 支持多种数据格式的导入与导出,包括 CSV、Excel、SQL 等。以下是一个从 CSV 文件导入数据的例子:

# 从 CSV 文件导入数据
data = pd.read_csv('example.csv')

# 显示前几行数据
print(data.head())

3. 数据选择与过滤

在 Pandas 中,我们可以使用不同的方法选择和过滤数据。以下是一些基本的示例:

3.1 选择列

# 选择特定列
selected_column = df['A']
print(selected_column)

3.2 过滤行

# 使用条件过滤行
filtered_rows = df[df['B'] > pd.Timestamp('20220101')]
print(filtered_rows)

通过上述示例,我们初步了解了 Pandas 模块的一些基础知识,包括数据结构、数据导入、以及数据选择与过滤。在实际应用中,Pandas 提供了丰富的功能和方法,能够更灵活、高效地处理各种数据。在以后的文章中,我们将深入学习 Pandas 的进阶功能,助力更复杂的数据分析任务。

4. 数据处理与操作

Pandas 不仅仅用于数据的选择和过滤,还提供了丰富的数据处理和操作功能。下面我们将介绍一些常用的操作。

4.1 缺失值处理

在实际数据中,常常会遇到缺失值。Pandas 提供了多种方法来处理缺失值,例如删除含有缺失值的行或列,或者填充缺失值。以下是一个简单的例子:

# 创建一个含有缺失值的 DataFrame
df_missing = pd.DataFrame({
    'A': [1, 2, np.nan, 4],
    'B': [5, np.nan, 7, 8]
})

# 删除含有缺失值的行
df_missing_cleaned = df_missing.dropna()
print(df_missing_cleaned)

4.2 数据统计与描述

Pandas 提供了多种统计和描述性统计的方法,可以帮助我们更好地理解数据。以下是一些简单的例子:

# 计算均值
mean_value = df['C'].mean()
print(f"Mean of column C: {mean_value}")

# 描述性统计
description = df.describe()
print(description)

4.3 数据排序与排名

Pandas 允许我们对数据进行排序和排名,以便更好地理解数据的分布。以下是一个排序的例子:

# 按列排序
df_sorted = df.sort_values(by='B')
print(df_sorted)

5. 数据可视化

Pandas 可以与其他数据可视化工具(如 Matplotlib 和 Seaborn)结合使用,以创建直观的图表,更好地呈现数据分布和关系。

5.1 折线图

折线图是一种常用的数据可视化方式,可以展示随时间变化的趋势。下面是一个简单的折线图示例:

import matplotlib.pyplot as plt

# 创建一个时间序列的 DataFrame
date_rng = pd.date_range(start='2022-01-01', end='2022-01-05', freq='D')
df_time_series = pd.DataFrame(date_rng, columns=['date'])
df_time_series['data'] = np.random.randint(0, 100, size=(len(date_rng)))

# 绘制折线图
plt.plot(df_time_series['date'], df_time_series['data'])
plt.xlabel('Date')
plt.ylabel('Data')
plt.title('Time Series Data')
plt.show()

5.2 直方图

直方图是用于表示数据分布的有效工具,可以显示数据的频率分布情况。以下是一个简单的直方图示例:

# 创建一个含有随机数据的 DataFrame
df_histogram = pd.DataFrame({'data': np.random.normal(size=100)})

# 绘制直方图
plt.hist(df_histogram['data'], bins=20, edgecolor='black')
plt.xlabel('Value')
plt.ylabel('Frequency')
plt.title('Histogram')
plt.show()

通过学习数据可视化的基础,我们可以更生动地呈现数据,有助于更深入地理解数据的分布和规律。

6. 数据分组与聚合

Pandas 提供了强大的分组与聚合功能,能够根据指定的条件将数据分组,然后对每个组进行聚合操作。这对于数据分析中的统计和汇总非常有用。

6.1 数据分组

首先,让我们创建一个含有多个类别的 DataFrame,并使用 groupby 方法进行分组:

# 创建一个含有多个类别的 DataFrame
df_groupby = pd.DataFrame({
    'Category': ['A', 'B', 'A', 'B', 'A', 'B'],
    'Value': [10, 20, 15, 25, 30, 35]
})

# 按照 'Category' 列进行分组
grouped = df_groupby.groupby('Category')

6.2 聚合操作

在分组后,我们可以对每个组进行聚合操作,如计算均值、求和等:

# 计算每个组的均值
mean_values = grouped.mean()
print(mean_values)

6.3 多重分组

Pandas 还支持多重分组,即按照多个列进行分组。以下是一个多重分组的例子:

# 创建一个含有多个类别的 DataFrame
df_multi_groupby = pd.DataFrame({
    'Category1': ['A', 'B', 'A', 'B', 'A', 'B'],
    'Category2': ['X', 'Y', 'X', 'Y', 'X', 'Y'],
    'Value': [10, 20, 15, 25, 30, 35]
})

# 按照 'Category1' 和 'Category2' 列进行分组
multi_grouped = df_multi_groupby.groupby(['Category1', 'Category2'])

# 计算每个组的均值
mean_values_multi = multi_grouped.mean()
print(mean_values_multi)

通过数据分组与聚合,我们能够更灵活地进行数据统计和分析,发现不同类别之间的差异与规律。

7. 数据合并与连接

在实际数据分析中,往往需要将不同来源或不同格式的数据进行合并与连接。Pandas 提供了多种方法来实现数据的合并与连接,以便更全面地分析数据。

7.1 数据合并

使用 merge 方法可以按照指定的列将两个 DataFrame 合并为一个:

# 创建两个示例 DataFrame
df1 = pd.DataFrame({'key': ['A', 'B', 'C'], 'value': [1, 2, 3]})
df2 = pd.DataFrame({'key': ['A', 'B', 'D'], 'value': [4, 5, 6]})

# 合并两个 DataFrame
merged_df = pd.merge(df1, df2, on='key', how='inner')
print(merged_df)

7.2 数据连接

使用 concat 方法可以按照指定的轴将两个 DataFrame 连接起来:

# 创建两个示例 DataFrame
df3 = pd.DataFrame({'A': ['A0', 'A1', 'A2'], 'B': ['B0', 'B1', 'B2']})
df4 = pd.DataFrame({'C': ['C0', 'C1', 'C2'], 'D': ['D0', 'D1', 'D2']})

# 沿列方向连接两个 DataFrame
concatenated_df = pd.concat([df3, df4], axis=1)
print(concatenated_df)

7.3 数据合并与连接的类型

在数据合并时,可以选择不同的合并类型,包括内连接(inner)、外连接(outer)、左连接(left)和右连接(right)。这些类型决定了合并时如何处理缺失值和非匹配的数据。

通过学习数据合并与连接,我们可以更好地处理来自不同数据源的信息,整合数据进行更全面的分析。

8. 时间序列数据处理

Pandas 在处理时间序列数据方面有着强大的功能,可以轻松处理日期、时间和时间间隔。时间序列数据处理对于金融、气象、生态学等领域的数据分析非常重要。

8.1 创建时间序列

Pandas 提供了 DatetimeIndex 对象,使得创建时间序列变得简单:

# 创建一个时间序列
date_rng = pd.date_range(start='2022-01-01', end='2022-01-05', freq='D')
time_series = pd.Series(np.random.randn(len(date_rng)), index=date_rng)
print(time_series)

8.2 时间频率与重采样

可以使用 resample 方法改变时间序列的频率,并进行汇总或插值:

# 将时间序列重采样为每周
weekly_resampled = time_series.resample('W').mean()
print(weekly_resampled)

8.3 移动窗口统计

使用 rolling 方法可以进行移动窗口统计,例如计算移动平均值:

# 计算3天的移动平均值
rolling_mean = time_series.rolling(window=3).mean()
print(rolling_mean)

8.4 时间索引与切片

利用时间索引,可以方便地进行时间范围的切片:

# 选择特定时间范围的数据
selected_data = time_series['2022-01-02':'2022-01-04']
print(selected_data)

通过学习时间序列数据处理,我们可以更好地理解和分析时间相关的数据,洞察数据的周期性和趋势。

9. 数据分析与统计

Pandas 提供了丰富的数据分析和统计功能,帮助用户从不同角度深入挖掘数据的信息。以下是一些常用的数据分析和统计方法:

9.1 描述性统计

使用 describe 方法可以生成关于数据分布的描述性统计信息:

# 生成描述性统计信息
description = time_series.describe()
print(description)

9.2 相关性分析

Pandas 提供了 corr 方法用于计算数据之间的相关性矩阵:

# 计算相关性矩阵
correlation_matrix = time_series.corr()
print(correlation_matrix)

9.3 数据透视表

利用 pivot_table 方法可以轻松创建数据透视表,对数据进行多维度的聚合:

# 创建数据透视表
pivot_table = pd.pivot_table(df, values='Value', index='Category1', columns='Category2', aggfunc=np.mean)
print(pivot_table)

9.4 分位数计算

使用 quantile 方法可以计算指定分位数的值:

# 计算中位数
median_value = time_series.quantile(0.5)
print(f"Median: {median_value}")

通过学习数据分析与统计,我们可以更全面地了解数据的分布、相关性和趋势,为进一步的决策和预测提供依据。

总结:

通过本技术博客,我们深入探讨了 Pandas 模块的基础知识和高级功能,包括数据结构、数据导入导出、选择与过滤、数据处理、排序排名、数据可视化、数据分组与聚合、数据合并与连接、时间序列数据处理以及数据分析与统计。在学习过程中,我们通过丰富的代码示例和详细解析,帮助读者建立了对 Pandas 的全面理解,并提供了处理不同数据任务的技能。

Pandas 作为一个强大而灵活的数据分析工具,为数据科学家、分析师和工程师提供了丰富的工具和方法。我们学习了如何创建和操作 Series 和 DataFrame,以及如何进行数据的导入导出。了解了数据的选择、过滤和处理方法,并通过数据可视化方法将数据呈现得更加直观。深入学习了数据分组与聚合,掌握了数据合并与连接的技巧。我们还学习了如何处理时间序列数据,从而更好地理解和分析与时间相关的数据。

最后,我们介绍了数据分析与统计的重要性,通过 Pandas 提供的丰富工具,可以更深入地挖掘数据背后的信息,包括描述性统计、相关性分析、数据透视表和分位数计算等。这些技能使读者能够在实际数据分析项目中更加灵活地处理和分析数据。

通过学习 Pandas 的基础和高级功能,读者将为从事数据分析和处理工作打下坚实的基础。在未来的学习和实践中,建议读者进一步探索 Pandas 的高级功能,深化对数据科学领域的理解,以更好地应对复杂的数据分析任务。希望本技术博客能够为读者在 Pandas 数据处理领域的学习和应用提供有力的支持。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

R语言课程论文-飞机失事数据可视化分析

数据来源:Airplane Crashes Since 1908 (kaggle.com) 代码参考:Exploring historic Air Plane crash data | Kaggle 数据指标及其含义 指标名 含义 Date 事故发生日期(年-月-日) Time 当地时间,24小时制,格式为hh:mm Locat…

Android 11以上获取不到第三方app是否安装

开年第一篇&#xff0c;处理了一下年前的小问题。 问题&#xff1a;本地app跳转到第三方app地图进行导航&#xff0c;获取不到第三方地图是否安装。 解决&#xff1a; 1.添加包名 This can be done by adding a <queries> element in the Android manifest.在app下的…

红队打靶练习:IMF: 1

目录 信息收集 1、arp 2、nmap 3、nikto 目录探测 gobuster dirsearch WEB 信息收集 get flag1 get flag2 get flag3 SQL注入 漏洞探测 脱库 get flag4 文件上传 反弹shell 提权 get flag5 get flag6 信息收集 1、arp ┌──(root㉿ru)-[~/kali] └─# a…

【力扣hot100】刷题笔记Day5

前言 回学校了&#xff0c;荒废了半天之后打算奋发图强猛猛刷题&#xff0c;找实习&#xff01;赚钱&#xff01;&#xff01; 560. 和为 K 的子数组 - 力扣&#xff08;LeetCode&#xff09; 前缀法 哈希表 这个题解解释比官方清晰&#xff0c;截个图方便看&#xff0c;另一…

慎投!2023年共124本SCI/SSCI被剔除汇总(附电子档下载目录)

2023年SCI/SSCI剔除期刊汇总 2023年3月20日&#xff0c;Web of Science核心期刊目录再次更新&#xff01;共有50本期刊被剔除出SCIE & SSCI期刊目录&#xff0c;其中大部分为Hindawi旗下期刊&#xff08;19本&#xff09;&#xff0c;引起不小的轰动&#xff01; 2023年全…

数据结构之时空复杂度

一、前言 1&#xff09;什么是数据结构 数据结构(Data Structure)是计算机存储、组织数据的方式&#xff0c;指相互之间存在一种或多种特定关系的数据元素的 集合。 2&#xff09;什么是算法 算法(Algorithm):就是定义良好的计算过程&#xff0c;他取一个或一组的值为输入&am…

计算机网络——14CDN

CDN 视频流化服务和CDN&#xff1a;上下文 视频流量&#xff1a;占据着互连网大部分的带宽 Netflix&#xff0c;YouTube&#xff1a;占据37%&#xff0c;16%的下行流量 挑战&#xff1a;规模性-如何服务~1B用户&#xff1f; 单个超级服务器无法提供服务&#xff08;为什么&am…

备战蓝桥杯---数学之博弈论基础1

目录 1.对称博弈 2.巴什博弈&#xff1a; 3.NIM博弈&#xff1a; 注意一个法则&#xff1a; 1.对称博弈 我们先看一个经典的例子&#xff1a; 下面是分析&#xff1a; 2.巴什博弈&#xff1a; 我们只要先手取1个&#xff0c;然后先手再去取5-刚刚后手的数字即可。 当石子数…

SHERlocked93 的 2021 年终总结

我还是和往年一样&#xff0c;总结发的又晚了一点&#xff0c;为什么又发这么晚呢&#xff0c;因为懒 年终总结 疫情之后时间时间过的太快了&#xff0c;不知道是不是只有我这样感觉。 四五月份去兰州玩了下&#xff08;其实是出差&#xff09;&#xff0c;终于看到了黄土高原&…

机器视觉与嵌入式技术:开拓自动驾驶和远程监控新视野

&#xff08;本文为简单介绍&#xff0c;观点源于网络&#xff09; 机器视觉系统是指利用计算机来模拟人眼的识别与判断。在自动驾驶和远程监控领域&#xff0c;机器视觉结合嵌入式技术的应用&#xff0c;不仅极大地提升了自动化水平&#xff0c;而且开辟了新的技术视野。 在…

迅为3A5000_7A2000开发板龙芯自主指令系统支持PCIE3.0、USB3.0、SATA3.0、HDMI、VGA等

性能强 采用全国产龙芯3A5000处理器&#xff0c;基于龙芯自主指令系统 (LoongArch)的LA464微结构&#xff0c;并进一步提升频率&#xff0c;降低功耗&#xff0c;优化性能。 桥片 采用龙芯 7A2000&#xff0c;支持PCIE 3.0、USB 3.0和 SATA 3.0.显示接口2 路、HDMI 和1路 VGA…

【ArcGIS微课1000例】0103:导出点、线、面要素的折点坐标值

点要素对应的是一个或者若干个坐标,线要素对应的是对个坐标值对应的点连起来,面要素是多个坐标值对应的点连起来构成的封闭多边形。本文讲述导出点的坐标值。 文章目录 一、点要素坐标导出1. 计算点坐标2. 导出点坐标二、线要素坐标导出1. 生成线要素折点2. 计算折点坐标3. 导…

一款服务于医院临床数据资源建设的平台,助力医疗信息化发展

随着医疗技术的不断发展&#xff0c;医院需要越来越多的临床数据来支持科研、教学和临床实践。然而&#xff0c;在传统的医疗系统中&#xff0c;数据分散、信息割裂、无法有效整合和共享。为了解决这一问题&#xff0c;临床数据资源整合平台应运而生。 临床数据资源整合平台是…

C++之内存对齐

目录 内存对齐 一、内存对齐解释 二、为什么要内存对齐&#xff1f; 三、内存对齐的三大规则 3.1、数据成员对齐规则 3.2、结构(或联合)的整体对齐规则 3.3、结构体作为成员 3.4、代码例子 内存对齐 一、内存对齐解释 对齐规则是按照成员的声明顺序&#xff0c;依次安排…

openGauss学习笔记-221 openGauss性能调优-确定性能调优范围-分析作业是否被阻塞

文章目录 openGauss学习笔记-221 openGauss性能调优-确定性能调优范围-分析作业是否被阻塞221.1 操作步骤 openGauss学习笔记-221 openGauss性能调优-确定性能调优范围-分析作业是否被阻塞 数据库系统运行时&#xff0c;在某些业务场景下查询语句会被阻塞&#xff0c;导致语句…

vue2+高德地图web端开发(二)

前言&#xff1a; 高德地图输入提示与 POI 搜索相关文档&#xff1a;输入提示与 POI 搜索-服务插件和工具-进阶教程-地图 JS API 2.0 | 高德地图API (amap.com) 输入提示-输入提示-示例中心-JS API 2.0 示例 | 高德地图API (amap.com) 创建输入框&#xff1a; 引入Element组…

java设计模式之解释器模式

解释器模式&#xff08;Interpreter Pattern&#xff09; 1.基本介绍 在编译原理中&#xff0c;一个算术表达式通过词法分析器形成词法单远&#xff0c;而这些词法单远再通过语法分析器构建语法分析树&#xff0c;最终形成一颗抽象的语法分析树&#xff0c;&#xff08;词法分…

Unity所有关于旋转的方法详解

前言&#xff1a;欧拉角和四元数的简单描述 我们在Inspector面板上看到的rotation其实是欧拉角&#xff0c; 我们将Inspector面板设置成Debug模式&#xff0c;此时看到的local Rotation才是四元数。 Unity中的欧拉旋转是按照Z-X-Y顺规执行的旋转&#xff0c;一组欧拉旋转过程中…

链表总结 -- 《数据结构》-- c/c++

链表的概念 链表是一种物理存储结构上非连续存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的引用链接次序实现的 。 链表是一种通过指针串联在一起的线性结构&#xff0c;每一个节点由两部分组成&#xff0c;一个是数据域一个是指针域&#xff08;存放指向下一个节点的…

Windows 编译 yangfengzzz/fluid-engine-OpenVDB

我想将 OpenVDB 接入 doyubkim 的流体引擎 https://github.com/doyubkim/fluid-engine-dev 然后搜到已经有人做过这件事了 https://github.com/yangfengzzz/fluid-engine-OpenVDB Windows 编译 yangfengzzz/fluid-engine-OpenVDB 但是我是 windows&#xff0c;所以想要编译…