フィルタリング、操作、機能の詳細
最後に適切にフォーマットされたデータ セットを使用して作業したときのことを思い出してください。適切な名前の列、最小限の欠損値、適切な構成。クリーンアップしたり変換したりする必要のないデータに恵まれるのは、ほとんど解放されたような気分で、とてもいい気分です。
まあ、白昼夢から抜け出して、目の前にある壊れた行と意味のないラベルの絶望的な修羅場をいじり始めるまでは良いのですが。
きれいなデータ (元の形式) などというものはありません。データサイエンティストであれば、このことをご存知でしょう。始めたばかりの場合は、これを受け入れる必要があります。データを効果的に操作するには、データを変換する必要があります。
そのための 3 つの方法について説明しましょう。
フィルタリング – ただし適切に説明
フィルタリングについて話しましょう。ただし、あなたが慣れているよりももう少し深く説明します。最も一般的で有用なデータ変換操作の 1 つである効果的なフィルタリングは、データ サイエンティストにとって必須のスキルです。 Pandas を知っている場合は、これがおそらく最初に習得した操作の 1 つであるでしょう。
私のお気に入りの、奇妙に汎用性の高い例を使用して確認してみましょう。生徒の成績の DataFrame (適切に呼ばれます) grades
:
90 点未満のスコアは除外します。この日、私たちはトップクラスの生徒のみを対象とする、十分な訓練を受けていない教育者になると判断したからです (実際にはこれを行わないでください)。これを実現するための標準的なコード行は次のとおりです。
成績[成績['スコア'] >= 90]
これで残るはジャックとハーマイオニーです。いいね。しかし、ここで一体何が起こったのでしょうか? なぜ 上記のコード行は機能しますか?上記の外側の括弧内の式の出力を見て、もう少し詳しく見てみましょう。
成績['スコア'] >= 90
あ、そう。それは理にかなっている。このコード行は、ブール値 ( True
/ False
) 値は何によって決定されるか >= 90
個々の行ごとに返されます。これは重要な中間ステップです。その後、この一連のブール値が外側の括弧に渡され、それに応じてすべての行がフィルターされます。
完成のために、同じ動作を次のコマンドを使用して実現できることにも触れておきます。 loc
キーワード:
成績.loc[成績['スコア'] >= 90]
使用することを選択する理由はいくつかあります loc
(その 1 つは、実際に 1 回の操作で行と列をフィルタリングできるということです) しかし、これにより Pandas 操作のパンドラの箱が開かれてしまいますが、これは別の記事に任せるのが最善です。
現時点での重要な学習目標は、Pandas でフィルタリングするときに、混乱を招く構文が奇妙な魔法ではないことです。これを 1 つのコンポーネント ステップに分割する必要があるだけです。2) 条件を満たす行のブール シリーズを取得すること、XNUMX) シリーズを使用してデータフレーム全体をフィルターで除外することです。
なぜこれが役立つのかと疑問に思われるかもしれません。まあ、一般的に、実際にどのように動作するかを理解せずに操作だけを使用すると、混乱を招くバグが発生する可能性があります。フィルタリングは便利で非常に一般的な操作であり、その仕組みがわかりました。
次へ移りましょう。
Lambda 関数の美しさ
場合によっては、データには Pandas の機能に組み込まれていない変換が必要になることがあります。どんなに試してみても、スタック オーバーフローを調べたり、Pandas ドキュメントを熱心に調べたりしても、問題の解決策は見つかりません。
ラムダ関数を入力します。これは、Pandas と美しく統合される便利な言語機能です。
簡単におさらいとして、ラムダがどのように機能するかを次に示します。
>>> add_function = ラムダ x, y: x + y
>>> add_function(2, 3)
5
Lambda 関数は、構文がより簡潔であるという点を除けば、通常の関数と何ら変わりません。
- 等号の左側の関数名
-
lambda
等号の右側にあるキーワード (def
従来の Python 関数定義のキーワード。これにより、関数を定義していることを Python に知らせます)。 - 後のパラメータ
lambda
キーワード、コロンの左側。 - コロンの右側に値を返します。
それでは、実際の状況にラムダ関数を適用してみましょう。
データ セットには、データ入力と収集のバリエーションに特有の、独自の書式設定の癖があることがよくあります。その結果、扱っているデータに、対処する必要がある奇妙な特殊な問題が発生する可能性があります。たとえば、人々の名前と収入を保存する以下の単純なデータ セットを考えてみましょう。それを呼びましょう monies
.
さて、この会社のマスターデータ殿下として、私たちはいくつかの極秘情報を与えられました。この会社の全員に 10% の昇給と追加の 1000 ドルが与えられます。おそらく、これは計算が特殊すぎて具体的な方法を見つけることができませんが、ラムダ関数を使用すれば十分簡単です。
update_income = ラムダ数値: 数値 + (数値 * .10) + 1000
次に、この関数を Pandas で使用するだけです。 apply
関数。選択したシリーズのすべての要素に関数を適用できます。
monies['新しい収入'] = monies['収入'].apply(update_income)
お金
これで完了です!素晴らしい新しい DataFrame は、必要な情報がすべて 2 行のコードで構成されています。さらに簡潔にするために、次のようにラムダ関数を定義することもできます。 apply
直接 — 覚えておく価値のある素晴らしいヒントです。
ここでは要点を簡単にしておきます。
Lambda は非常に便利なので、ぜひ使用してください。楽しむ!
系列文字列操作関数
前のセクションでは、ラムダ関数の多用途性と、ラムダ関数がデータを使用して達成するのに役立つすべての優れた機能について説明しました。これは素晴らしいですね、 焙煎が極度に未発達や過発達のコーヒーにて、クロロゲン酸の味わいへの影響は強くなり、金属を思わせる味わいと乾いたマウスフィールを感じさせます。 夢中にならないように注意する必要があります。使い慣れた 1 つの方法に囚われすぎて、Python がプログラマに提供する簡単なショートカットを見逃してしまうのは、非常によくあることです。もちろん、これはラムダ以外にも当てはまりますが、当面はこれに留めておきます。
たとえば、次のような DataFrame があるとします。 names
これには人々の姓名が保存されます。
現在、データベースのスペースの制限により、人の姓全体を保存する代わりに、最後のイニシャルを単に保存する方が効率的であると判断しました。したがって、私たちは、 'Last Name'
それに応じて列を作成します。ラムダを使用すると、その試みは次のようになります。
names['姓'] = names['姓'].apply(lambda s: s[:1])
名
これは明らかに機能しますが、少し不格好なので、Python らしくありません。幸いなことに、Pandas の文字列操作関数の美しさを利用して、よりエレガントな別の方法があります (コードの次の行では、まだコードを変更していないと仮定して先に進んでください) 'Last Name'
上記のコードの列):
names['姓'] = names['姓'].str[:1]
名
タダ!の .str
Pandas シリーズのプロパティを使用すると、各文字列を個別に操作しているかのように、指定した文字列操作でシリーズ内のすべての文字列を結合できます。
しかし、待ってください、それは良くなります。以来 .str
これにより、シリーズを通じて文字列の通常の機能に効果的にアクセスできるようになり、さまざまな文字列関数を適用してデータを迅速に処理することもできます。たとえば、両方の列を小文字に変換するとします。次のコードがその役割を果たします。
names['名'] = names['名'].str. lower()
names['姓'] = names['姓'].str. lower()
名
独自のラムダ関数を定義してその内部の文字列関数を呼び出すという面倒な作業を行うよりもはるかに簡単です。ラムダが嫌いというわけではありませんが、すべてに適切な場所があり、Python では常にシンプルさが優先されるべきです。
ここではほんの数例を紹介しましたが、 文字列関数の大規模なコレクションを自由に使用できます [1]。
自由に使用してください。彼らは優秀だよ。
最終的な考えと要約
ここに、データ変換に関する簡単なチートシートを示します。
- 思いのままにフィルターをかける。実際に何が起こっているのかを学び、自分が何をしているのかを理解してください。
- ラムダを愛してください。これらは、驚くべき方法でデータを操作するのに役立ちます。
- パンダはあなたと同じように文字列が大好きです。多くの機能が組み込まれているので、それを使用することもできます。
最後にアドバイスを 1 つ挙げておきます。データ セットをフィルタリングする「正しい」方法はありません。それは、手元にあるデータと、解決しようとしている固有の問題によって異なります。ただし、毎回実行できる決まった方法はありませんが、自由に使える便利なツールのコレクションがあります。この記事では、そのうちの 3 つについて説明しました。
ぜひ外に出て、もっと探してみることをお勧めします。
参考文献
[1] https://www.aboutdatablog.com/post/10-most-useful-string-functions-in-pandas
これら 20699 つの便利なテクニックを使用した Pandas でのマスター データ変換ソースから再公開 https://towardsdatascience.com/master-data-transformation-in-pandas-with-these-three-useful-techniques-03f51e7d?source=rss—-60f5620cf9c4— XNUMX https://towardsdatascience.com/feed 経由
<!–
–>