ホームページ  >  記事  >  バックエンド開発  >  DataFrame でのインデックス作成を通じてデータを効率的に取得するための Pandas のヒント

DataFrame でのインデックス作成を通じてデータを効率的に取得するための Pandas のヒント

coldplay.xixi
coldplay.xixi転載
2020-09-16 16:15:142158ブラウズ

DataFrame でのインデックス作成を通じてデータを効率的に取得するための Pandas のヒント

関連する学習の推奨事項: python チュートリアル

今日は、pandas データ処理のトピックです。 3 回の記事では、DataFrame のインデックスについて説明します。

前の記事では、iloc、loc、論理インデックスなど、DataFrame データ構造で一般的に使用されるインデックスの使用方法を紹介しました。今日の記事では、DataFrame の 基本操作 をいくつか見てみましょう。

データ アライメント

2 つの DataFrame の合計を計算できます。pandas は自動的に 2 つの DataFrame を実行します。データ配置. データが一致しない場合は、Nan (非数値) に設定されます。

最初に 2 つの DataFrame を作成します:

import numpy as npimport pandas as pddf1 = 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 を追加したことがわかります。マージすると、 両方の DataFrame に表示されない位置は Nan に設定されます。実はこれには意味があり、足し算だけではなく、2つのDataFrameの加減乗除の四則演算も計算できます。 2 つの DataFrame の割り算を計算すると、それに該当しないデータが Nan に設定されるだけでなく、ゼロで割るという行為も外れ値の発生につながります (必ずしもそうではない場合があります) Nan ですが、inf です)。

fill_value

2 つの DataFrame を操作する場合、もちろん null は必要ありません表示される値。このとき、null 値を埋める必要があります。演算子を直接使用して演算を実行すると、埋めるためのパラメータを渡すことができません。このとき、で提供されている 算術メソッドを使用する必要があります。データフレーム。

DataFrame には一般的に使用される演算子がいくつかあります:

add、sub、p については誰もがよく理解していますが、ここでの radd メソッドと rsub メソッドは何を意味するのでしょうか?なぜ前に r があるのでしょうか?

ややこしいようですが、率直に言うと、radd は パラメータを反転するために使用されます。たとえば、DataFrame 内のすべての要素の逆数を取得したい場合は、1/df と記述できます。 1 自体は DataFrame ではないため、1 を使用して DataFrame 内のメソッドを呼び出すことはできず、パラメーターを渡すこともできません。この状況を解決するには、1/df を df.rp(1)## として記述します。 # なので、パラメータを渡すことができます。

除算の計算中にゼロによる除算が発生するため、無限大を表す inf が得られます。

add メソッドと p メソッドで fill_value パラメータを渡すことができます。このパラメータは

計算前に片側の欠損値の場合に埋め込むことができます。つまり、1 つの DataFrame でのみ欠落している位置は、指定した値で置き換えられます。両方の DataFrame で欠落している場合でも、Nan になります。

結果を比較すると、加算後の (1, d)、(4, c)、および (5, c) の位置はすべて Nan であることがわかります。 2 つのデータフレーム df1 および df2 内のこれらの位置は空の値であるため、埋められません。

#fill_value このパラメータは、インデックスの再作成など、多くの API で使用されます。使用方法は同じなので、API ドキュメントを確認するときに注意してください。

それでは、入力後も表示されるこの種の空の値をどうすればよいでしょうか?これらの場所を手動で見つけて入力することしかできませんか?もちろん、それは非現実的ですが、Pandas は、特に null 値を解決する API も提供します。

#null 値を入力する前に、最初に行う必要があるのは

null 値を検索します

。この問題を解決するには、bool DataFrame を返す isna API を使用します。DataFrame 内の各位置は、元の DataFrame の対応する位置が null 値であるかどうかを示します。

dropna

もちろん、null 値かどうかを確認するだけです。明らかに十分ではありません。null 値が表示されないことを期待する場合もありますが、この時点では、null 値を削除する を選択できます。この状況では、DataFrame の Dropna メソッドを使用できます。

dropna を使用すると、null 値を含む行が破棄されることがわかりました。 null 値を持たない行のみが保持されますが、行ではなく列を破棄したい場合がありますが、このときは axis パラメータを渡すことで制御できます。

このようにして、null 値を含まない列が得られます。行と列の制御に加えて、 厳密性も制御できます。ドロップ を実行中。 How パラメータで判断できますが、How は 2 つの値 (1 つは 'all'、もう 1 つは 'any') を渡すことをサポートしています。 All は、特定の行または列がすべて null 値の場合にのみ破棄されることを意味し、any に対応すると、null 値が出現する限り破棄されます。デフォルトで入力されていない場合は、any とみなされますが、通常はこのパラメータを使用せず、印象があれば十分です。

fillna

null 値を含むデータを削除するだけでなく、パンダも使用できます Fill empty値、実際、これは最も一般的に使用される方法でもあります。

塗りつぶし用に特定の値を渡すだけです。

fillna は新しい DataFrame を返します。すべて Nan の値です。指定した値に置き換えられます。新しい DataFrame を返さずに元のデータを直接変更する場合は、inplace パラメーターを使用してこれがインプレース操作であることを示すことができ、パンダは元の DataFrame を変更します。

df3.fillna(3, inplace=True)复制代码

除了填充具体的值以外,我们也可以和一些计算结合起来算出来应该填充的值。比如说我们可以计算出某一列的均值、最大值、最小值等各种计算来填充。fillna这个函数不仅可以使用在DataFrame上,也可以使用在Series上,所以我们可以针对DataFrame中的某一列或者是某些列进行填充:

除了可以计算出均值、最大最小值等各种值来进行填充之外,还可以指定使用缺失值的前一行或者是后一行的值来填充。实现这个功能需要用到method这个参数,它有两个接收值,ffill表示用前一行的值来进行填充,bfill表示使用后一行的值填充。

我们可以看到,当我们使用ffill填充的时候,对于第一行的数据来说由于它没有前一行了,所以它的Nan会被保留。同样当我们使用bfill的时候,最后一行也无法填充。

总结

今天的文章当中我们主要介绍了DataFrame的一些基本运算,比如最基础的四则运算。在进行四则运算的时候由于DataFrame之间可能存在行列索引不能对齐的情况,这样计算得到的结果会出现空值,所以我们需要对空值进行处理。我们可以在进行计算的时候通过传入fill_value进行填充,也可以在计算之后对结果进行fillna填充。

在实际的运用当中,我们一般很少会直接对两个DataFrame进行加减运算,但是DataFrame中出现空置是家常便饭的事情。因此对于空值的填充和处理非常重要,可以说是学习中的重点,大家千万注意。

想了解更多编程学习,敬请关注php培训栏目!

以上がDataFrame でのインデックス作成を通じてデータを効率的に取得するための Pandas のヒントの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjuejin.imで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。