Pandasデータ構造--Series(一)


Pandasデータ構造–Series
pandasには主に2つのデータ構造があり,それぞれSeriesとDataFrameである.
  • Series:1次元配列に類似したオブジェクトで、データ(様々なNumPyデータ型)のセットと、それに関連するデータラベル(インデックス)のセットから構成されます.単純なSeriesオブジェクトは、データのセットのみで生成できます.注意:Seriesのインデックス値は繰り返し可能です.
  • DataFrame:1つの表型のデータ構造で、1組の秩序ある列を含み、各列は異なる値タイプ(数値、文字列、ブール型など)であり、DataFrameは行インデックスも列インデックスもあり、Seriesからなる辞書と見なすことができる.

  • この章では、Seriesについて説明します.主に以下の点が含まれています.
    文書ディレクトリ
  • Pandasデータ構造--Series
  • リスト作成
  • 辞書作成
  • インデックス
  • スライス
  • 再インデックス
  • データ演算
  • のソートとランキング
  • 要約および計算記述統計
  • 一意数、値カウント
  • 処理欠落データ
  • リストの作成
    pandasには2つの主要なデータ構造があり、1つ目はSeriesであり、1次元配列に類似したデータ構造であり、1組のデータとそれに関連するデータラベルのセットから構成されている.リストに直接基づいてSeriesを生成することができます.
    obj = pd.Series([4,7,-5,3])
    obj
    
    #  
    0    4
    1    7
    2   -5
    3    3
    dtype: int64
    

    indexとvaluesプロパティでobjのインデックスと値を取得できます.
    obj.index
    #RangeIndex(start=0, stop=4, step=1)
    obj.values
    #array([ 4,  7, -5,  3])
    
             0-n-1,            
    obj2 = pd.Series([4,7,-5,3],index=['d','b','a','c'])
    obj2
    
    #  
    d    4
    b    7
    a   -5
    c    3
    dtype: int64
    

    辞書の作成
    ディクショナリdictでSeriesを直接作成できます.この場合、ディクショナリ>のキーがインデックスとなり、ディクショナリの値が対応する値となります.
    sdata = {'Ohio':35000,'Texas':71000,'Oregon':16000,'Utah':5000}
    obj3 = pd.Series(sdata)
    obj3 
    #  
    Ohio      35000
    Oregon    16000
    Texas     71000
    Utah       5000
    dtype: int64
    

    ディクショナリとインデックスの両方を使用している場合は、ディクショナリ内のインデックスに一致する値が見つかり、対応する場所に配置されます.
    states = ['California','Ohio','Texas','Oregon']
    obj4 = pd.Series(sdata,index = states)
    obj4
    #  
    California        NaN
    Ohio          35000.0
    Texas         71000.0
    Oregon        16000.0
    dtype: float64
    

    索引
    相対位置の下付きまたはindexでSeriesの要素にアクセスできます
    obj2[2]
    #-5
    
    obj2['a']
    #-5
    
    obj2[\['a','b','d']]
    #  
    a   -5
    b    7
    d    4
    dtype: int64
    

    スライス
    下付き文字を使用したスライスとは異なり、ラベルを使用してスライスする場合、末端には次のものが含まれます.
    obj['b':'c']
    #  
    b    1.0
    c    2.0
    dtype: float64
    

    再索引
    インデックスの値を簡単に変更するのではなく、reindex関数を使用してSeriesを再インデックスできます.
    obj2 = pd.Series([4,7,-5,3],index=['d','b','a','c'])
    obj3 = obj2.reindex(['a','b','c','d','e'])
    obj3
    #  
    a   -5.0
    b    7.0
    c    3.0
    d    4.0
    e    NaN
    dtype: float64
    

    reindexを使用する場合、新しいインデックスが元のデータに値がない場合、対応する値はNAになります.この場合、fill_を使用できます.valueプロパティは、データを入力します.
    obj4 = obj2.reindex(['a','b','c','d','e'],fill_value=0)
    obj4
    #  
    a   -5
    b    7
    c    3
    d    4
    e    0
    dtype: int64
    

    reindex関数にはmethodプロパティがあります.差分値の入力を行いますが、インデックスは単調に増加または単調に減少する必要があります.そのため、時間系列のような秩序化データで一般的に使用されます.
    # obj5 = obj2.reindex(['a','b','c','d','e'],method='ffill')    
    obj3 = pd.Series(['blue','Purple','yellow'],index = [0,2,4])
    obj3.reindex(range(6),method='ffill')
    #  
    0      blue
    1      blue
    2    Purple
    3    Purple
    4    yellow
    5    yellow
    dtype: object
    

    データ演算
    Seriesはnumpyのいくつかの配列演算(ブール型データに基づいてフィルタリング、スカラー乗算、数学関数の適用など)を行うことができます.これらはインデックスと値の間のリンクを保持します.
    np.exp(obj2)
    #  
    d      54.598150
    b    1096.633158
    a       0.006738
    c      20.085537
    dtype: float64
    

    Seriesは、インデックス値からデータ値へのマッピングであり、辞書パラメータを必要とする多くの関数で使用できるため、一定の長さの秩序化辞書と見なすことができます.
    b' in obj2
    #True
    

    Seriesの最も重要な機能は、算術演算で異なるインデックスのデータを自動的に整列させることです.
    obj3 + obj4
    #  
    California         NaN
    Ohio           70000.0
    Oregon         32000.0
    Texas         142000.0
    Utah               NaN
    dtype: float64
    

    ソートとランキング
    sort_indexはインデックスに従ってソートし、新しいオブジェクトを返します.
    obj = pd.Series(range(4),index=['d','a','b','c'])
    obj.sort_index()
    #  :
    a    1
    b    2
    c    3
    d    0
    dtype: int64
    

    sort_values列値に基づいてソート
    obj.sort_values()
    #  :
    d    0
    a    1
    b    2
    c    3
    dtype: int64
    

    rank関数を使用すると1つのランキング値が増加し、1から配列内の有効データの数まで、rankは平準関係に対して各グループに平均ランキングを割り当てることで平準関係を破壊し、この平均値を使用したくない場合はmethodパラメータを使用して指定した方法でrankソートを行うことができます.たとえばfirstを使用すると、元のデータに値が表示される順序で順位を割り当てることができます.
    obj = pd.Series([7,-5,7,4,2,0,4])
    obj.rank()
    #  :
    0    6.5
    1    1.0
    2    6.5
    3    4.5
    4    3.0
    5    2.0
    6    4.5
    dtype: float64
    
    obj.rank(method='first')
    #  
    0    6.0
    1    1.0
    2    7.0
    3    4.0
    4    3.0
    5    2.0
    6    5.0
    dtype: float64
    

    説明統計の要約と計算
    Seriesではsum,mean,maxなどの方法が実装されているが,ここでは詳細に説明しないが,共分散と相関係数を求める方法を主に紹介する:Seriesのcorr法は2つのSeriesで重なる非NAのインデックスで整列した値の相関係数を計算するために用いられ,このようにcovは共分散を計算するために用いられる.
    obj1 = pd.Series(np.arange(10),index = list('abcdefghij'))
    obj2 = pd.Series(np.arange(12),index = list('cdefghijklmn'))
    obj1.corr(obj2)
    #1.0
    obj1.cov(obj2)
    #6.0
    

    ユニーク数、値カウント
    Uniqueはソートされていない一意の値配列を返し、value_counts()は各数のカウントを返す
    obj = pd.Series(['c','a','d','a','a','b','b','c','c'])
    uniques = obj.unique()
    uniques
    #array(['c', 'a', 'd', 'b'], dtype=object)
    
    #value_counts()       
    obj.value_counts()
    #  
    a    3
    c    3
    b    2
    d    1
    dtype: int64
    

    欠落データの処理
    Pandasにおける欠落値に関する方法は主に以下の3つがある:isnull法はデータが空のデータであるか否かを判断するために用いられる;fillnaメソッドは、欠落したデータを埋めるために使用されます.dropnaメソッドは、欠落したデータを破棄するために使用されます.上記の2つの方法は、元のデータに影響を与えない新しいSeriesまたはDataFrameを返します.元のデータに直接変更したい場合はinplaceパラメータを使用します.
    data = pd.Series([1,np.nan,3.5,np.nan,7])
    data.fillna(0)
    #  
    0    1.0
    1    0.0
    2    3.5
    3    0.0
    4    7.0
    dtype: float64