2017-11-09 14 views
-8

はこれを印刷しますdf空のDataFrameをフィルタリングし、そのDataFrameの列を保持するにはどうすればよいですか?

import pandas as pd 

df = pd.DataFrame() 
df['A'] = [1,2,3] 
df['B'] = [4,5,6] 
print(df) 

df1 = df[df.A.apply(lambda x:x == 4)] 
df2 = df1[df1.B.apply(lambda x:x == 1)] 
print(df2) 

私のデータフレームを検討

df 
    A B 
0 1 4 
1 2 5 
2 3 6 
df2 
Empty DataFrame 
Columns: [] 
Index: [] 

なぜパンダは私の列を保持していない軸とき、私は空のシリーズでフィルタリング?

+0

'Columns:[A、B]'が出力にあると思います。私はこの特定のケースで 'df.A == 4'を行うことができますが、すべての適用呼がそのように置き換えられるわけではないので、それは答えを提供しません。 –

答えて

-5
df2 = df1[df1.B.apply(lambda x:x == 1).astype(bool)] 

と間違って何も他のすべての答えが欠落しているがポイント(Wen'sはOKです)

+0

何が起こっているのは、あなたが '__getitem__'(すなわち、' [] ')を空の系列で使用しているということです。パンダはこれを列のスライスとして解釈しています。 'astype(bool)'を使うことで、Pandasはそれを行ブールスライスとして解釈します。 – piRSquared

+0

詳しい情報を追加するには、あなたの質問に編集リンクを使用してください。回答を投稿するボタンは、質問に対する完全な回答のためだけに使用してください。 - [レビューから](/レビュー/低品質の投稿/ 17891873) –

2

パンダは、探しているフィルタリングのタイプをサポートしています。 カラムをフィルタリングする方法があります。 (Ab)applyをそのまま使用することはできません。

df1 = df.query('B == 1') 
df1 

Empty DataFrame 
Columns: [A, B] 
Index: [] 

列が保存されています

df1.columns 
Index(['A', 'B'], dtype='object') 

また、データフレームが空であるかどうかを把握することは難しいことではありません。

df1.empty 
True 
3

パンダはほとんど特に簡単な例

PSのための私たちが必要とするすべての状況、考えてみましょう。パンダ

df1 = df.loc[df.A.apply(lambda x:x == 4)] 
df2 = df1.loc[df1.B.apply(lambda x:x == 1)] 
df1 
Out[53]: 
Empty DataFrame 
Columns: [A, B] 
Index: [] 
df2 
Out[54]: 
Empty DataFrame 
Columns: [A, B] 
Index: [] 
+2

これは私が考えていた答えです。ブール値の選択に '[]'を使うと、列スライスと行スライスのあいまいさがわかります(これは私が細部まで動機づけたものではありません)。 '.loc'を使うと、私たちの目標は明確になります('、: 'は必要ありません)。 – DSM

関連する問題