今日はpandasのデータ処理トピックの4つ目の投稿として、DataFrameのインデックスについてお話します。
前回は、DataFrameデータ構造について、ilocインデックス、locインデックス、論理インデックスなど、一般的なインデックスの使い方を紹介しました。今日は、DataFrameの基本的な操作について説明します。
データの整列
2つのDataFrameの合計を計算することができます。pandasはこれらの2つのDataFrameのデータを自動的に整列し、整列されていない場合はNanに設定します。
まず、2つのDataFrameを作りましょう:
import numpy as np
import pandas as pd
df1 = pd.DataFrame(np.arange(9).reshape((3, 3)), columns=list('abc'), index=['1', '2', '3'])
df2 = pd.DataFrame(np.arange(12).reshape((4, 3)), columns=list('abd'), index=['2', '3', '4', '5'])
結果的には、numpyの配列を通してDataFrameを作成し、インデックスとカラムを指定するだけで、想定していたものと同じになります。
2つのDataFrameを足すと、こうなります:
pandasがマージされた2つのDataFrameを追加することを発見し、ここで2つのDataFrameに存在しない位置にNanに設定されます。これは実際には非常に合理的で、実際には、加算だけでなく、2つのDataFrameの加算、減算、乗算、4つの演算の除算を計算することができます可能です。あなたは2つのDataFrameの除算を計算している場合は、対応するデータに加えて、Nanに設定されません、ゼロで割るの動作はまた、異常値の発生につながるでしょう。
fill_value
2つのDataFrameに対して演算を行う場合、当然ながらNULL値があると困ります。今回は、空の値を埋める必要があり、演算のために演算子を直接使用すると、埋めるためにパラメータを渡す方法はありません、今回は算術メソッドの提供のためにDataFrameを使用する必要があります。
DataFrameには、よく使われる演算子がいくつかあります:
add,sub,divメソッドはよく理解できるとして、ここでのraddメソッドとrsubメソッドの意味は?
raddは引数を反転させるために使います。例えば、DataFrameの全要素の逆数を取得したい場合、1 / dfと書きます。1自体はDataFrameではないので、1を使ってDataFrameのメソッドを呼び出すことはできませんし、パラメータを渡すこともできませんが、このケースを解決するために、1 / dfをdf.rdiv(1)と書くことで、その中にパラメータを渡すことができます。パラメータを渡すには
ゼロによる除算は数え上げの除算の過程で発生するため、無限大を表すinfが得られます。
fill_value パラメータを add メソッドや div メソッドに渡すことで、片方の計算で欠落した値を埋めることができます。つまり、片方の DataFrame だけが欠損している場合は、指定した値で置き換えられますが、両方の DataFrame が欠損している場合は、Nan のままとなります。
結果を比較すると、df1とdf2のDataFramesがnullであるため、合計の後、位置がNanであることがわかります。
fill_valueパラメータはreindexなど多くのapiに登場します。使い方は同じなので、apiのドキュメントを確認する際に注意してみてください。
では、埋めた後にも表示されるヌルはどうすればいいのでしょうか?手作業でこれらの位置を探して埋めるしかないのでしょうか?もちろん、それは現実的ではありません。pandasはapiのnull値に対する特別な解決策も提供しています。
ヌル値アプリ
ヌル値を埋めるには、まずヌル値を見つける必要があります。この問題のために、このAPIがあり、それはbool型のDataFrameを返し、各位置のDataFrameは、ヌル値の位置に対応する元のDataFrameを表すかどうか。
dropna
もちろん、ちょうどヌル値が確かに十分ではないかどうかを調べるために、時にはヌル値が表示されないことを希望しますが、今回はヌル値をドロップすることを選択することができます。この場合、DataFrameのdropnaメソッドを使用することができます。
dropnaを使用すると、NULL値を持つ行が破棄されることがわかりました。行ではなく列を破棄したい場合もあり、これはaxisパラメータを渡すことで制御できます。
行と列の制御に加えて、ドロップの実行の厳密さを制御することもできます。このパラメータは、どのように渡す2つの値をサポートするかによって判断することができ、1つは 'all'、1つは 'any'です。allは、すべてのnull値の行または列にのみ廃棄され、anyはnull値がある限り廃棄されることに対応しています。デフォルトはanyとみなされる場合は記入されず、一般的な状況ではこのパラメータは使用されませんが、おそらくそれに対する印象を持っています。
fillna
null 値を含むデータを削除するだけでなく、pandas を使用してnull 値を埋めることもできます。
パディングに使用する特定の値を渡すのは非常に簡単です:
fillnaは、すべての Nan 値を指定された値に置き換えた新しい DataFrame を返します。新しいDataFrameを返すのではなく、元のデータに直接変更を加えたい場合は、inplaceパラメータを使用して、これが置換操作であることを示すことができます。
df3.fillna(3, inplace=True)
特定の値を埋めるだけでなく、いくつかの計算と組み合わせて、埋めるべき値を割り出すこともできます。例えば、ある列の平均値、最大値、最小値など、様々な計算を組み合わせて値を埋めることができます:
平均値、最大値、最小値、およびその他の値を塗りつぶすための計算に加えて、前の行や次の行の欠落した値を塗りつぶすために使用することも指定できます。この関数の実装では、メソッド this パラメータを使用する必要があります。このパラメータは、2 つの受信値、ffill は前の行の値を埋めるために、bfill は後の行の値を埋めるために使用します。
ffillを使用した場合、最初の行のデータは前の行がないため、Nanが保持されます。同様に、bfill を使用した場合、最後の行を埋めることはできません。
まとめ
今日の記事は、主に最も基本的な4つの操作など、DataFrameのいくつかの基本的な操作を紹介します。4つの操作では、DataFrameに起因するインデックスの行と列の間に存在する可能性があり、計算結果がNULLに表示されるように、整列することはできませんので、NULL値に対処する必要があります。あなたが計算を埋めるためにfill_valueを渡すことができ、また、計算後に結果を埋めることができます。