python——pandas初體驗


一、pandas簡介

Pandas是面向數據分析場景設計的Python開源軟件工具包,其名字來自英文詞組panel data,作為經濟界的術語指多維結構化的數據集。從命名來看,Pandas特別適合處理序列數據、表格數據等具有良好結構的數據。在軟件使用上,由於Pandsa是基於BSD開源軟件許可證發布的,能夠很方便地在學習、辦公和工業應用等場合使用。

二、pandas特點

通過帶有標簽的列和索引,Pandas使我們可以以一種便於理解的方式來處理數據。它可以讓我們毫不費力地從諸如csv類型的文件中導入數據,並使用類似數據庫查詢語言SQL的方式來訪問數據。我們可以用 Pandas快速地對數據進行復雜的轉換和過濾等操作。Pandas這方面表現是非常優秀的。具體有着如下特點:

  • 通過DataFrame對象的索引能力來管理復雜的表格數據;
  • 靈活的讀取和寫入文件的接口;
  • 數據對齊和強大的缺失數據處理;
  • 對數據集維度的重構和切分;
  • 強大的數據切片、索引和區域選取能力;
  • 二維表格數據中列的插入和刪除;
  • 類似SQL語言Group by語法的數據分組、執行函數和合並結果的能力;
  • 合並數據集;
  • 層次化的索引技術來處理復雜高維數據;
  • 強大的時間序列處理能力,提供日期區間生成、頻率計算、移動窗口統計、移動窗口線性回歸和數據;
  • 為了提高執行效率,Pandas的核心代碼是使用CythonC編寫的。

三、pandas數據處理對象

(一)、Series: 一維數組,類似於Python中的基本數據結構list,區別是Series只允許存儲相同的數據類型,這樣可以更有效的使用內存,提高運算效率。就像數據庫中的列數據;Series是一個一維的類似的數組對象,包含一個數組的數據(任何NumPy的數據類型)和一個與數組關聯的數據標簽,被叫做索引 。最簡單的Series是由一個數組的數據構成;Series的交互式顯示的字符串表示形式是索引在左邊,值在右邊。因為我們沒有給數據指定索引,一個包含整數0N-1這里N是數據的長度)的默認索引被創建。你可以分別的通過它的valuesindex屬性來獲取 Series的數組表示和索引對象;通常,需要創建一個帶有索引來確定每一個數據點的Series。如果你有一些數據在一個Python字典中,你可以通過傳遞字典來從這些數據創建一個Series,只傳遞一個字典的時候,結果Series中的索引將是排序后的字典的鍵。

(二)、DataFrame: 二維的表格型數據結構。很多功能與R中的data.frame類似。可以將DataFrame理解為Series的容器;DataFrame是一個表格型的數據結構,是以一個或多個二維塊存放的數據表格(層次化索引),DataFrame既有行索引還有列索引,它有一組有序的列,每列既可以是不同類型(數值、字符串、布爾型)的數據,或者可以看做由Series組成的字典。

四、具體例子

1、創建一個名為series_aseries數組,當中值為[1,2,5,7],對應的索引為['nu', 'li', 'xue', 'xi'];創建一個名為dict_a的字典,字典中包含如下內容{'ting':1, 'shuo':2, 'du':32, 'xie':44};將dict_a字典轉化成名為series_bseries數組。

# -*- coding: utf-8 -*-
from pandas import Series,DataFrame import pandas as pd def create_series(): ''' 返回值: series_a: 一個Series類型數據 series_b: 一個Series類型數據 dict_a: 一個字典類型數據 '''
    # 請在此添加代碼 完成本關任務
    # ********** Begin *********#
    series_a = Series([1,2,5,7],index = ['nu', 'li', 'xue', 'xi']) dict_a = {'ting':1, 'shuo':2, 'du':32, 'xie':44} series_b = Series(dict_a) # ********** End **********#

    # 返回series_a,dict_a,series_b
    return series_a,dict_a,series_b

2、創建一個五行三列的名為df1DataFrame數組,列名為 [states,years,pops],行名['one','two','three','four','five'];給df1添加新列,列名為new_add,值為[7,4,5,8,2]

# -*- coding: utf-8 -*-
from pandas import Series,DataFrame import pandas as pd def create_dataframe(): ''' 返回值: df1: 一個DataFrame類型數據 '''
    # 請在此添加代碼 完成本關任務
    # ********** Begin *********#
    dictionary = {'states':['0hio','0hio','0hio','Nevada','Nevada'], 'years':[2000,2001,2002,2001,2002],'pops':[1.5,1.7,3.6,2.4,2.9]} df1 = DataFrame(dictionary) df1 = DataFrame(dictionary, index=['one','two','three','four','five']) df1['new_add'] =[7,4,5,8,2] # ********** End **********#

    #返回df1
    return df1

3、將test3/uk_rain_2014.csv中的數據導入到df1中;將列名修改為['water_year','rain_octsep','outflow_octsep','rain_decfeb', 'outflow_decfeb', 'rain_junaug', 'outflow_junaug'];計算df1的總行數並存儲在length1中。

# -*- coding: utf-8 -*-
from pandas import Series,DataFrame import pandas as pd def read_csv_data(): ''' 返回值: df1: 一個DataFrame類型數據 length1: 一個int類型數據 '''
    # 請在此添加代碼 完成本關任務
    # ********** Begin *********#
    # Reading a csv into Pandas.
    df1 = pd.read_csv('test3/uk_rain_2014.csv', header=0,encoding = "gbk") # Changing column labels.
    df1.columns = ['water_year','rain_octsep','outflow_octsep','rain_decfeb', 'outflow_decfeb', 'rain_junaug', 'outflow_junaug'] length1 = len(df1) # ********** End **********#
#返回df1,length1 return df1,length1

4、對代碼中s1進行按索引排序,並將結果存儲到s2;對代碼中d1進行按值排序(indexf),並將結果存儲到d2

# -*- coding: utf-8 -*-
from pandas import Series,DataFrame import pandas as pd def sort_gate(): ''' 返回值: s2: 一個Series類型數據 d2: 一個DataFrame類型數據 '''

    # s1是Series類型數據,d1是DataFrame類型數據
    s1 = Series([4, 3, 7, 2, 8], index=['z', 'y', 'j', 'i', 'e']) d1 = DataFrame({'e': [4, 2, 6, 1], 'f': [0, 5, 4, 2]}) # 請在此添加代碼 完成本關任務
    # ********** Begin *********#
    s2 = s1.sort_index() d2 = d1.sort_values(by = "f") # ********** End **********#

#返回s2,d2 return s2,d2

5、在s1中刪除z行,並賦值到s2d1中刪除yy列,並賦值到d2

# -*- coding: utf-8 -*-
from pandas import Series,DataFrame import numpy as np import pandas as pd def delete_data(): ''' 返回值: s2: 一個Series類型數據 d2: 一個DataFrame類型數據 '''

    # s1是Series類型數據,d1是DataFrame類型數據
    s1 = Series([5, 2, 4, 1], index=['v', 'x', 'y', 'z']) d1=DataFrame(np.arange(9).reshape(3,3), columns=['xx','yy','zz']) # 請在此添加代碼 完成本關任務
    # ********** Begin *********#
    s2 = s1.drop('z') d2 = d1.drop('yy',axis = 1) # ********** End **********#

    # 返回s2,d2
    return s2, d2

6、讓df1df2相加得到df3,並設置默認填充值為4

# -*- coding: utf-8 -*-
from pandas import Series,DataFrame import numpy as np import pandas as pd def add_way(): ''' 返回值: df3: 一個DataFrame類型數據 '''

    # df1,df2是DataFrame類型數據
    df1 = DataFrame(np.arange(12.).reshape((3, 4)), columns=list('abcd')) df2 = DataFrame(np.arange(20.).reshape((4, 5)), columns=list('abcde')) # 請在此添加代碼 完成本關任務
    # ********** Begin *********#
    df3 = df1.add(df2,fill_value = 4) # ********** End **********#

    # 返回df3
    return df3

7、去除df1中重復的行,並把結果保存到df2中。

# -*- coding: utf-8 -*-
from pandas import Series,DataFrame import pandas as pd def delete_duplicated(): ''' 返回值: df2: 一個DataFrame類型數據 '''

    # df1是DataFrame類型數據
    df1 = DataFrame({'k1': ['one'] * 3 + ['two'] * 4, 'k2': [1, 1, 2, 3, 3, 4, 4]}) # 請在此添加代碼 完成本關任務
    # ********** Begin *********#
    df2 = df1.drop_duplicates() # ********** End **********#

    # 返回df2
    return df2

8、對s1進行數據重塑,轉化成DataFrame類型,並復制到d1

# -*- coding: utf-8 -*-
from pandas import Series,DataFrame import pandas as pd import numpy as np def suoying(): ''' 返回值: d1: 一個DataFrame類型數據 '''
    #s1是Series類型數據
    s1=Series(np.random.randn(10), index=[['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'd', 'd'], [1, 2, 3, 1, 2, 3, 1, 2, 2, 3]]) # 請在此添加代碼 完成本關任務
    # ********** Begin *********#
    d1 = s1.unstack() # ********** End **********#
    # 返回d1
    return d1 suoying()

四、總結

pandas初體驗學習完畢,下次我們學習pandas進階。希望同大家一起進步。

 


免責聲明!

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



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