つまり、分析の準備ができたデータをサブセット化するときは、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が最適です。しかし、これは確かな作業方法のようであり、ワークフローとコードを簡素化できます。