PySpark数据分析基础:PySpark Pandas创建、转换、查询、转置、排序操作详解

简介: PySpark数据分析基础:PySpark Pandas创建、转换、查询、转置、排序操作详解

前言


时至如今Pandas仍然是十分火热的基于Python的数据分析工具,与numpy、matplotlib称为数据分析三大巨头,是学习Python数据分析的必经之路。Pandas提供了大量能使我们快速便捷地处理数据的函数和方法,它是使Python成为强大而高效的数据分析环境的重要因素之一。因此我们做分布式数据分析也同样离不开Pandas的支持。Spark中的PySpark是内嵌有Pandas接口的:


c4fe93144a734ebd8d7633f18de94649.png


使用方式和直接使用Pandas库是有所不同的,本篇文章将使用pyspark的pandas和pandas两种数据操作方式来展示pyspark的pandas该如何灵活使用来进行数据分析。


文章还是紧接上篇文章:


PySpark数据分析基础:PySpark基础功能及基础语法详解


一、Pandas数据结构


Pandas数据结构是通用了,共有六种数据结构,想要详细了解可以去看我这篇文章:一文速学-数据分析之Pandas数据结构和基本操作代码


1.Series


Series要理解很简单,就像它的单词为系列的意思。类似与数据结构中的字典有索引和对应值,也可以理解为数组,在Series中的下标1,2,3,...索引对应它的不同值。


0dc0a7b2761840639fdd9f21b73f8467.png


2.DataFrame


刚才从Series转化为DataFrame就可以看出DataFrame的格式就像一张表格,包含行和列索引。通过对应的行列对DataFrame进行操作,更像是对SQL中表格处理,两者有一定的类似之处。因此学过SQL的对DataFrane的操作更容易了解。


727924bf7c51459ba4a14720785c6e37.png


3.Time-Series


以时间为索引的Series。


faf4e0ba98ed45df858be3fbaa756688.png

4.Panel


三维的数组,可以理解为DataFrame的容器。

b9ad879c3dd7472da469ed45a5d0d980.png

5.Panel4D


像Panel一样的4维数据容器。


6.PanelND


拥有factory集合,可以创建像Panel4D一样N维命名容器的模块。


后面四个用的场景十分少见,Series和DataFrame是最常用的数据类型,掌握这两个数据结构操作方法足够进行数据分析。


二、Pyspark实例创建


1.引入库


import pandas as pd
import numpy as np
import pyspark.pandas as ps
from pyspark.sql import SparkSession

如果运行上述代码有 WARNING:root:‘PYARROW_IGNORE_TIMEZONE‘ environment variable was not set.可以加上:

import os
os.environ["PYARROW_IGNORE_TIMEZONE"] = "1"


2.转换实现


通过传递值列表,在Spark上创建pandas,让pandas API在Spark上创建默认整数索引:


pyspark pandas series创建


和pandas是一样的


s = ps.Series([1, 3, 5, np.nan, 6, 8])


5b3387433e684d539b1ac0cf3f61d531.png

pyspark pandas dataframe创建


和pandas也是一样的:

ps_df=ps.DataFrame(
    {'name':['id1','id2','id3','id4'],
     'old':[21,23,22,35],
     'city':['杭州','北京','南昌','上海']
    },
    index=[1,2,3,4])

9803e94d8767499b9f0a331f4d842c1b.png


from_pandas转换


我们先用pandas创建一个普通的DataFrame:


pd_df=pd.DataFrame(
    {'name':['id1','id2','id3','id4'],
     'old':[21,23,22,35],
     'city':['杭州','北京','南昌','上海']
    },
    index=[1,2,3,4])


之后直接使用from_pandas开始转换就可以了:


1. ps_df=ps.from_pandas(pd_df)
2. type(ps_df)


4e8bca04f5f14ad7a90c90bf98d7dc8d.png

Spark DataFrame转换


也可以通过Pandas的DataFrame转换为Spark DataFrame:

spark = SparkSession.builder.getOrCreate()
sp_df=spark.createDataFrame(pd_df)
sp_df.show()

9102c093ff6f4ca6a917ffde5565287b.png


通过Spark DataFrame转换为PySpark DataFrame:


ps_df=sp_df.pandas_api()


c86b3a3a835e44b5a4568c325d0ff7d2.png

且和pandas一样查看数据类型方法是一样的:


ps_df.dtypes



b15b79a0febc454e94d3ebf1b349fb4a.png

Spark DataFrame中的数据在默认情况下并不保持自然顺序


通过设置compute.ordered_head可以保持自然顺序,但它会导致内部排序的性能开销。


ps_df.head()

e0ecc48a830a464388cb21f7d48b37af.png

三、PySpark Pandas操作


1.读取行列索引


读取行索引:


ps_df.index


Int64Index([0, 1, 2, 3], dtype='int64')

读取列索引:


ps_df.columns


Index(['name', 'old', 'city'], dtype='object')


2.内容转换为数组


ps_df.to_numpy()


df1372a2932d455da80bccddf7c4b944.png


3.DataFrame统计描述


ps_df.describe()


描述的数值均为float


c27a1c5f6ddd45e4aff4bc38e979c7f7.png


4.转置


ps_df.T


转置内容old列为int64,转置会报错,需要先转换为str再进行转置:

ps_df['old']=ps_df['old'].astype(str)
ps_df.T

0ecd2811bc3641c5b692b91f66a8f65c.png


5.排序


按行索引排序


ps_df.sort_index(ascending=False)


6855e85955344ff1851a860efc62f725.png

按某列值排序


ps_df.sort_values(by='old')



2566250ef906406fa4feeb6d3d6717f4.png


目录
相关文章
|
3天前
|
机器学习/深度学习 数据采集 数据挖掘
解锁 Python 数据分析新境界:Pandas 与 NumPy 高级技巧深度剖析
【7月更文挑战第12天】Python的Pandas和NumPy库助力高效数据处理。Pandas用于数据清洗,如填充缺失值和转换类型;NumPy则擅长数组运算,如元素级加法和矩阵乘法。结合两者,可做复杂数据分析和特征工程,如产品平均销售额计算及销售额标准化。Pandas的时间序列功能,如移动平均计算,进一步增强分析能力。掌握这两者高级技巧,能提升数据分析质量和效率。
17 4
|
10天前
|
数据采集 机器学习/深度学习 数据可视化
了解数据科学面试中的Python数据分析重点,包括Pandas(DataFrame)、NumPy(ndarray)和Matplotlib(图表绘制)。
【7月更文挑战第5天】了解数据科学面试中的Python数据分析重点,包括Pandas(DataFrame)、NumPy(ndarray)和Matplotlib(图表绘制)。数据预处理涉及缺失值(dropna(), fillna())和异常值处理。使用describe()进行统计分析,通过Matplotlib和Seaborn绘图。回归和分类分析用到Scikit-learn,如LinearRegression和RandomForestClassifier。
26 3
|
1天前
|
数据采集 数据挖掘 数据处理
Python数据分析加速器:深度挖掘Pandas与NumPy的高级功能
【7月更文挑战第14天】Python的Pandas和NumPy库是数据分析的核心工具。Pandas以其高效的数据处理能力,如分组操作和自定义函数应用,简化了数据清洗和转换。NumPy则以其多维数组和广播机制实现快速数值计算。两者协同工作,如在DataFrame与NumPy数组间转换进行预处理,提升了数据分析的效率和精度。掌握这两者的高级功能是提升数据科学技能的关键。**
7 0
|
3天前
|
数据挖掘 数据处理 决策智能
Python 数据分析工具箱:深挖 Pandas 与 NumPy 高级功能,驱动智能决策
【7月更文挑战第12天】Python的Pandas和NumPy是数据分析的基石。Pandas提供灵活的数据结构如DataFrame,用于高效处理关系型数据,而NumPy则以多维数组和科学计算功能著称。两者结合,支持数据合并(如`pd.merge`)、时间序列分析(`pd.to_datetime`)和高级数组运算。通过掌握它们的高级特性,能提升数据分析效率,应用于各领域,如金融风险评估、市场分析和医疗预测,助力数据驱动的决策。学习和熟练运用Pandas与NumPy是成为出色数据分析师的关键。
|
10天前
|
存储 消息中间件 数据挖掘
Python实时数据分析:利用丰富的库(如Pandas, PySpark, Kafka)进行流处理,涵盖数据获取、预处理、处理、存储及展示。
【7月更文挑战第5天】Python实时数据分析:利用丰富的库(如Pandas, PySpark, Kafka)进行流处理,涵盖数据获取、预处理、处理、存储及展示。示例代码展示了从Kafka消费数据,计算社交媒体活跃度和物联网设备状态,并可视化结果。适用于监控、故障检测等场景。通过学习和实践,提升实时数据分析能力。
19 0
|
10天前
|
机器学习/深度学习 数据可视化 搜索推荐
Python在社交媒体分析中扮演关键角色,借助Pandas、NumPy、Matplotlib等工具处理、可视化数据及进行机器学习。
【7月更文挑战第5天】Python在社交媒体分析中扮演关键角色,借助Pandas、NumPy、Matplotlib等工具处理、可视化数据及进行机器学习。流程包括数据获取、预处理、探索、模型选择、评估与优化,以及结果可视化。示例展示了用户行为、话题趋势和用户画像分析。Python的丰富生态使得社交媒体洞察变得高效。通过学习和实践,可以提升社交媒体分析能力。
25 1
|
6天前
|
数据挖掘 Python
【Python】已解决:Python pandas读取Excel表格某些数值字段结果为NaN问题
【Python】已解决:Python pandas读取Excel表格某些数值字段结果为NaN问题
20 0
|
2天前
|
SQL 并行计算 API
Dask是一个用于并行计算的Python库,它提供了类似于Pandas和NumPy的API,但能够在大型数据集上进行并行计算。
Dask是一个用于并行计算的Python库,它提供了类似于Pandas和NumPy的API,但能够在大型数据集上进行并行计算。
19 9
|
23天前
|
数据采集 机器学习/深度学习 数据可视化
利用Python和Pandas库构建高效的数据分析流程
在数据驱动的时代,数据分析已成为企业决策的关键环节。本文介绍如何利用Python编程语言及其强大的数据分析库Pandas,构建一套高效且可扩展的数据分析流程。与常规的数据分析流程不同,本文不仅涵盖数据加载、清洗、转换等基础步骤,还强调数据可视化、模型探索与评估等高级分析技巧,并通过实际案例展示如何在Python中实现这些步骤,为数据分析师提供一套完整的数据分析解决方案。