Pandas基礎學習與Spark Python初探


摘要:pandas是一個強大的Python數據分析工具包,pandas的兩個主要數據結構Series(一維)和DataFrame(二維)處理了金融,統計,社會中的絕大多數典型用例科學,以及許多工程領域。在Spark中,python程序可以方便修改,省去java和scala等的打包環節,如果需要導出文件,可以將數據轉為pandas再保存到csv,excel等。

1.Pandas是什么?

       pandas是一個強大的Python數據分析工具包,是一個提供快速,靈活和表達性數據結構的python包,旨在使“關系”或“標記”數據變得簡單直觀。它旨在成為在Python中進行實用的真實世界數據分析的基本高級構建塊。此外,它的更廣泛的目標是成為最強大和最靈活的任何語言的開源數據分析/操作工具。

2.Pandas安裝

 這里使用pip包管理器安裝(python版本為2.7.13)。在windows中,cmd進入python的安裝路徑下的Scripts目錄,執行:

pip install pandas

即可安裝pandas,安裝完成后提示如下:

說明已成功安裝pandas.這里同時安裝了numpy等。

3.Pandas數據類型

   pandas非常適合許多不同類型的數據:

  • 具有非均勻類型列的表格數據,如在SQL表或Excel電子表格中
  • 有序和無序(不一定是固定頻率)時間序列數據。
  • 帶有行和列標簽的任意矩陣數據(均勻類型或異質)
  • 任何其他形式的觀測/統計數據集。數據實際上不需要被標記就可以被放置到Pandas的數據結構中

4.Pandas基礎

這里簡單學習Pandas的基礎,以命令模式為例,首先需要導入pandas包與numpy包,numpy這里主要使用其nan數據以及生成隨機數:

import pandas as pd
import numpy as np

4.1 pandas之Series

通過傳遞值列表創建Series,讓pandas創建一個默認整數索引:

4.2 pandas之DataFrame

通過傳遞numpy數組,使用datetime索引和標記的列來創建DataFrame:

 

查看DataFrame的頭部和尾部數據:

顯示索引,列和基礎numpy數據:

顯示數據的快速統計摘要:

按值排序:

選擇單個列,產生Series:

通過[]選擇,通過切片選擇行:

4.2.1 DataFrame讀寫csv文件

保存DataFrame數據到csv文件:

這里保存到c盤下,可以查看文件內容:

從csv文件讀取數據:

4.2.2 DataFrame讀寫excel文件

保存數據到excel文件:

這里保存到c盤下,可以查看文件內容:

注:此處需要安裝openpyxl,同pandas安裝相同,pip install openpyxl.
從excel文件讀取:

注:因為Excel需要單獨的模塊支持,所以需要安裝xlrd,同pandas安裝相同,pip install xlrd.

5.Pandas在Spark Python

 這里測試讀取一個已存在的parquet文件,目錄為/data/parquet/20170901/,這里讀取該目錄下名字為part-r-00000開始的文件。將文件內容中的兩列數據讀取並保存到文件。代碼如下:

#coding=utf-8

import sys
from pyspark import SparkContext
from pyspark import SparkConf
from pyspark.sql import SQLContext

class ReadSpark(object):
    def __init__(self, paramdate):
        self.parquetroot = '/data/parquet/%s' # 這里是HDFS路徑
        self.thedate = paramdate
        self.conf = SparkConf()
        self.conf.set("spark.shuffle.memoryFraction", "0.5")
        self.sc = SparkContext(appName='ReadSparkData', conf=self.conf)
        self.sqlContext = SQLContext(self.sc)

    def getTypeData(self):
        basepath = self.parquetroot % self.thedate
        parqFile = self.sqlContext.read.option("mergeSchema", "true").option('basePath', basepath).parquet(
            '%s/part-r-00000*' % (basepath))
        resdata = parqFile.select('appId', 'os')
        respd = resdata.toPandas()
        respd.to_csv('/data/20170901.csv') #這里是Linux系統目錄
        print("--------------------data count:" + str(resdata.count()))

if __name__ == "__main__":
    reload(sys)
    sys.setdefaultencoding('utf-8')
    rs = ReadSpark('20170901')
    rs.getTypeData()

將代碼命名為TestSparkPython.py,在集群提交,這里使用的命令為(參數信息與集群環境有關):

 spark-submit --master yarn --driver-memory  6g  --deploy-mode client --executor-memory 9g  --executor-cores 3  --num-executors 50   /data/test/TestSparkPython.py 

執行完成后,查看文件前五行內容,head -5 /data/20170901.csv:

總結:python編寫spark程序還是非常方便的,pandas包在數據處理中的優勢也很明顯。在python越來越火的當下,值得深入學好python,就像python之禪寫的那樣…… 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM