つまり、分析の準備ができたデータをサブセット化するときは、2つのことを行うということです。
Pandasには、これらのそれぞれを実行するいくつかの方法と、行と列を取得するのに役立ついくつかの手法があります。新しいパンダユーザーにとっては、選択肢がたくさんあるので混乱する可能性があります。
iloc、loc、brackets、query、isin、np.where、maskなどを使用していますか...
メソッドチェーン
現在、メソッドチェーンは、データラングリング時に機能する優れた方法です。Rでは、select()列とfilter()行という簡単な方法があります。
したがって、Pandasで物事を単純にしたい場合は、filter()for列とquery()for行を使用しないでください。これらは両方ともデータフレームを返すため、ブールインデックスをいじくり回す必要はなくdf[ ]、戻り値を追加する必要もありません。
それで、それはどのように見えますか:-
df.filter(['col1', 'col2', 'col3']).query("col1 == 'sometext'")
次に、、、などgroupbyの他のメソッドをチェーンできます。dropna()sort_values()reset_index()
一貫性をfilter()保ち、列のquery()取得と行の取得に使用することで、しばらくしてコードに戻ったときにコードを読みやすくなります。
しかし、フィルターは行を選択できますか?
はい、これは当てはまりますが、デフォルトでquery()は行と列をfilter()取得します。したがって、デフォルトを使用する場合は、axis=パラメーターを使用する必要はありません。
query()
query()は両方で使用できますand//比較演算子も使用できます。ではなく、でPythonを使用することもできます。or &|> , < , >= , <=, ==, !=
@my_listを使用して、クエリにリストを渡すことができます
クエリを使用して行を取得する例
df.query('A > B')
df.query('a not in b')
df.query("series == '2206'")
df.query("col1 == @mylist")
df.query('Salary_in_1000 >= 100 & Age < 60 & FT_Team.str.startswith("S").values')
フィルター()
df[]したがって、フィルターは基本的にブラケットをdf[[]]使用するのと同じであり、ラベルを使用して列を選択します。ただし、角かっこ表記以上のことを行います。
filterにはlike=、部分的な名前の列を選択するのに役立つparamがあります。
df.filter(like='partial_name',)
フィルタには、選択に役立つ正規表現もあります
df.filter(regex='reg_string')
したがって、この作業方法を要約すると、これまでの状況では機能しない可能性があります。たとえば、インデックス作成/スライスを使用する場合は、ilocが最適です。しかし、これは確かな作業方法のようであり、ワークフローとコードを簡素化できます。