Pythonのpandasモジュール

8430 ワード

文書ディレクトリ
  • Pandas概要
  • 2 Pandas取付
  • 3 Pandas使用
  • 3.1導入
  • 3.2 Series
  • 3.3 DataFrame

  • 1 Pandas概要
    1、Python Data Analysis Libraryまたはpandasは、データ分析タスクを解決するために作成されたNumPyベースのツールです.Pandasは大量のライブラリといくつかの標準的なデータモデルを組み込み、大規模なデータセットを効率的に操作するために必要なツールを提供しています.pandasは、データを迅速かつ容易に処理できる多くの関数と方法を提供しています.すぐに、Pythonを強力で効率的なデータ分析環境にする重要な要素の一つであることがわかります.
    2、Pandasはpythonのデータ分析パッケージで、最初はAQR Capital Managementによって2008年4月に開発され、2009年末にオープンソースされた.現在、Pythonパケットの開発に専念しているPyData開発チームによって開発とメンテナンスを継続し、PyDataプロジェクトの一部に属している.Pandasは最初に金融データ分析ツールとして開発されたので,pandasは時間系列分析に良いサポートを提供した.Pandasの名前はパネルデータ(panel data)とpythonデータ分析(data analysis)から来ています.panel dataは経済学における多次元データセットに関する用語であり、Pandasにおいてもpanelのデータ型が提供される.
    3、データ構造:Series:一次元配列、Numpyの一次元arrayと似ている.両者はPythonの基本的なデータ構造リストにも近い.違いは、リストの要素は異なるデータ型であってもよいが、ArrayとSeriesでは同じデータ型しか記憶できないことであり、メモリをより効率的に使用し、演算効率を向上させることができる.Time-Series:時間をインデックスとするSeries.DataFrame:2 Dの表型データ構造.多くの機能とRのdata.frameは似ています.DataFrameはSeriesのコンテナとして理解できます.以下の内容は主にDataFrameがメインです.Panel:3次元の配列で、DataFrameの容器と理解できます.Pandasには2つの独自の基本データ構造があります.読者が注意しなければならないのは、2つのデータ構造を持っているが、Pythonの1つのライブラリであるため、Pythonにあるデータ型はここで依然として適用され、クラスを使用して自分でデータ型を定義することもできる.ただ、Pandasでは、SeriesとDataFrameの2つのデータ型が定義されており、データ操作が簡単になります.
    2 Pandas取付
    pandasはpythonのサードパーティライブラリなので使う前にインストールしてそのまま使う必要があります
    pip install pandas  #      pandas      。
    

    3 Pandas使用
    jupyterの下でインタラクティブコマンドラインを使用することをお勧めします.
    3.1導入
    pandasモジュールをインポートし、別名を使用します.次に、今回のインポートに基づいてSeriesモジュールをインポートします.
    In [1]: from pandas import Series
    In [2]: import pandas as pd
    

    3.2 Series
    Seriesはリストのように、インデックス値に対応する一連のデータです.
    Seriesは「立ち上がる」リストです.
    In [3]: s = Series([1,4,'ww','tt'])
    In [4]: s
    

    Out[4]:
    0   1
    1   4
    2   ww
    3   tt
    dtype: object
    

    もう一つはリストに似ています.中の要素のタイプは、あなたが勝手に決めます(実は必要に応じて決めます).ここでは,当然その属性と方法があるSeriesオブジェクトを実質的に作成した.たとえば、次の2つの属性は、Seriesオブジェクトのデータ値とインデックスを順に表示します.
    In [5]: s.index
    Out[5]: RangeIndex(start=0, stop=4, step=1)
    
    In [8]: s.values
    Out[8]: array([1, 4, 'ww', 'tt'], dtype=object)
    

    リストのインデックスは0から始まる整数のみで、Seriesデータ型はデフォルトではインデックスも同じです.ただし、リストとは異なり、Seriesはインデックスをカスタマイズできます.
    In [9]: s2 = Series(['wangxing','man',24],index=['name','sex','age'])
    In [10]: s2
    Out[10]:
    name    wangxing
    sex       man
    age      24
    dtype: object
    

    各要素にインデックスがあり、インデックスに基づいて要素を操作できます.リストの操作を覚えていますか?Seriesにも、似たような操作があります.まず簡単に見て、インデックスに基づいて値を表示し、値を変更します.
    In [12]: s2['name']
    Out[12]: 'wangxing'
    
    In [45]: s2['name'] = 'wudadiao'
    In [46]: s2
    Out[46]:
    name    wudadiao
    sex    man
    age   24
    dtype: object
    

    これはdictデータに似ているのではないでしょうか.なるほど.下を見て理解しました.
    読者は、前にSeriesオブジェクトを定義する際に、リスト、すなわちSeries()メソッドのパラメータを使用し、最初のリストがそのデータ値であり、indexを定義する必要がある場合は、後ろに置いてもリストであることに気づいたかどうか.この方法に加えて、Seriesオブジェクトは次の方法で定義できます.
    In [13]: sd = {'python':9000,'c++':9001,'c#':9000}
    In [14]: s3 = Series(sd)
    In [15]: s3
    Out[15]:
    c#    9000
    c++    9001
    python   9000
    dtype: int64
    

    なぜ前のdictに似ているのか理解できますか?もともとこのように定義できるからです.
    この場合、インデックスはカスタマイズできます.Pandasの利点はここで現れて、もしインデックスをカスタマイズしたら、自分で決めたインデックスは自動的に元のインデックスを探して、もし同じならば、元のインデックスの対応する値を取って、これは略称して“自動位置合わせ”になります.
    In [16]: s4 = Series(sd,index=['java','c++','c#'])
    In [17]: s4
    Out[17]:
    java    NaN
    c++    9001.0
    c#    9000.0
    dtype: float64
    

    Pandasでは,値がなければNaNに一斉に与えられる.
    Pandasは値が空かどうかを判断する専門的な方法があります.
    In [19]: pd.isnull(s4)
    Out[19]:
    java    True
    c++   False
    c#    False
    dtype: bool
    

    また、Seriesオブジェクトにも同様の方法があります.
    In [20]: s4.isnull()
    Out[20]:
    java    True
    c++   False
    c#    False
    dtype: bool
    

    インデックスの名前は、新しい定義から定義できます.
    In [21]: s4.index = ['  ','  ','English']
    In [22]: s4
    Out[22]:
          NaN
         9001.0
    English    9000.0
    dtype: float64
    

    Seriesデータについては、次のような演算を行うこともできます(演算については、後述します).
    In [23]: s4 * 2
    Out[23]:
          NaN
          18002.0
    English    18000.0
    dtype: float64
    
    In [24]: s4[s4 > 9000]
    Out[24]:
       9001.0
    dtype: float64
    

    Seriesはまず簡単に書きます.pandasの別のデータ構造DataFrameを見てみましょう.
    3.3 DataFrame
    DataFrameは、スプレッドシートやmysqlデータベースのような2次元のデータ構造です.その縦行をcolumnsと呼び,横行は前のSeriesと同様にindexと呼ぶ,すなわちcolumnsとindexによって主文の位置を決定できる.
    まずモジュールをインポートします
    In [27]: from pandas import Series,DataFrame
    In [26]: data = {"name":['google','baidu','yahoo'],"marks":[100,200,300],"price":[1,2,3]}
    In [28]: f1 = DataFrame(data)
    In [29]: f1
    Out[29]:
      marks   name    price
    0    100    google    1
    1    200    baidu    2
    2   300    yahoo    3
    

    これは、dict定義を使用してDataFrameオブジェクトを定義する一般的な方法です.辞書の「キー」(「name」、「marks」、「price」)は、DataFrameのcolumnsの値(名前)であり、辞書の各「キー」の「値」は、その縦の列に具体的にデータが埋め込まれているリストです.上の定義ではインデックスが確定していないので、慣例(Seriesですでに形成されている慣例)では0から始まる整数である.上記の結果から明らかなように、これはexcelまたはmysqlの表示効果のような2次元のデータ構造です.
    上記のデータ表示ではcolumnsの順序は規定されておらず、辞書の中のキーの順序のようになっていますが、DataFrameではcolumnsは辞書のキーと比較して明らかに異なり、その順序が規定されているので、以下のようにすることができます.
    In [31]: f2 = DataFrame(data,columns=['name','price','marks'])
    In [32]: f2
    Out[32]:
      name    price    marks
    0  google   1        100
    1  baidu    2         200
    2  yahoo   3         300
    

    Seriesと同様、DataFrameデータのインデックスもカスタマイズ可能
    In [35]: f3 = DataFrame(data,columns=['name','marks','price'],index=['a','b','c'])
    In [36]: f3
    Out[36]:
      name    marks    price
    a   google      100        1
    b     baidu          200       2
    c     yahoo         300            3
    

    DataFrameを定義する方法は、上記のほかに「辞書セット辞書」を使用することもできます.
    In [40]: newdata = {'lang':{'first':'python','second':'java'},'price':{'first':5000,'second':2000}}
    In [41]: f4 = DataFrame(newdata)
    In [42]: f4
    Out[42]:
        lang    price
    first   python   5000
    second   java    2000
    

    辞書には、数列名(第1層キー)と横行インデックス(第2層辞書キー)と対応するデータ(第2層辞書値)が規定されており、つまり辞書には各データ格子のデータが規定されており、規定されていないものはすべて空である.
    DataFrameオブジェクトのcolumns属性は,本来のcolumns名を表示できる.また、ある縦の列のすべての内容(もちろんインデックスも含む)を、辞書のように取得することもできます.
    newdata = {"lang":{"firstline":"python","secondline":"java"}, "price":{"firstline":8000}} 
     f4 = DataFrame(newdata) 
     f4 
                  lang     price 
    firstline     python   8000 
    secondline    java     NaN 
    
     DataFrame(newdata, index=["firstline","secondline","thirdline"]) 
                  lang     price 
    firstline     python   8000 
    secondline    java     NaN 
    thirdline     NaN      NaN 
    

    DataFrameオブジェクトのcolumns属性は,本来のcolumns名を表示できる.また、ある縦の列のすべての内容(もちろんインデックスも含む)を、辞書のように取得することもできます.
    In [44]: f3['name']
    Out[44]:
    a google
    b baidu
    c yahoo
    Name: name, dtype: object
    

    次の操作は、同じカラムに値を割り当てることです.
    newdata1 = {'username':{'first':'wangxing','second':'dadiao'},'age':{'first':24,'second':25}}
    In [67]: f6 = DataFrame(newdata1,columns=['username','age','sex'])
    In [68]: f6
    Out[68]:
      username    age    sex
    first wangxing    24    NaN
    second dadiao   25    NaN
    
    In [69]: f6['sex'] = 'man'
    In [70]: f6
    Out[70]:
      username  age    sex
    first wangxing   24    man
    second dadiao   25    man
    

    単独で値を割り当てることもでき、値を統一することができるほか、「点対点」に数値を追加し、前のSeriesと組み合わせて、DataFrameオブジェクトの縦列ごとにSeriesオブジェクトである以上、まずSeriesオブジェクトを定義し、DataFrameイメージに置くことができます.次のようになります.
    ssex = Series([' ',' '],index=['first','second'])
    In [72]: f6['sex'] = ssex
    In [73]: f6
    Out[73]:
      username    age   sex
    first wangxing     24       
    second dadiao    25     
    

    もっと正確にデータを修正できますか?もちろんいいです.辞書の操作を完全に真似します.
    In [74]: f6['age']['second'] = 30
    In [75]: f6
    Out[75]:
      username    age    sex
    first wangxing    24           
    second dadiao   30