リストのインデックスに基づいてパンダの行を選択します


105

私はデータフレームdfを持っています:

   20060930  10.103       NaN     10.103   7.981
   20061231  15.915       NaN     15.915  12.686
   20070331   3.196       NaN      3.196   2.710
   20070630   7.907       NaN      7.907   6.459

次に、リストに示されている特定のシーケンス番号を持つ行を選択します。ここが[1,3]であるとします。

   20061231  15.915       NaN     15.915  12.686
   20070630   7.907       NaN      7.907   6.459

どのように、またはどのような機能でそれを行うことができますか?

回答:


130
List = [1, 3]
df.ix[List]

トリックを行う必要があります!データフレームでインデックスを作成するときは、常に.ix()メソッドを使用します。とても簡単で柔軟性があります...

UPDATE これは、インデックス作成のために受け入れられた方法ではなくなりました。このixメソッドは非推奨です。使用.iloc整数ベースのインデックス作成と.locラベルベースのインデックスのために。


14
これは非推奨になりました。位置インデックスには.ilocを使用する必要があります
t_warsop

86

ilocを使用することもできます。

df.iloc[[1,3],:]

以前の計算のために、データフレームのインデックスが行の順序に対応していない場合、これは機能しません。その場合は以下を使用します。

df.index.isin([1,3])

...他の応答で提案されています。


61

別の方法(長いコードですが)でも、上記のコードより高速です。%timeit関数を使用して確認します。

df[df.index.isin([1,3])]

PS:あなたは理由を理解します

ここに画像の説明を入力してください


1
使用のdf.index.get_level_values(0).isinマルチインデックスのために
CiaranWelsh

4

大規模なデータセットの場合、skiprowsパラメーターを使用して選択した行のみを読み取ることはメモリ効率が良いです。

pred = lambda x: x not in [1, 3]
pd.read_csv("data.csv", skiprows=pred, index_col=0, names=...)

これにより、1と3を除くすべての行をスキップするファイルからDataFrameが返されます。


細部

ドキュメントから:

skiprows :リストのようなまたは整数または呼び出し可能、デフォルト None

...

呼び出し可能の場合、呼び出し可能関数は行インデックスに対して評価され、行をスキップする必要がある場合はTrueを、そうでない場合はFalseを返します。有効な呼び出し可能な引数の例はlambda x: x in [0, 2]

この機能は、バージョンpandas 0.20.0以降で動作します。対応する問題関連する投稿も参照してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.