pandsを使用して指定された列の値に対応する行を絞り出すことができます。


pandsでは、どうやってmysqlのような検索語句の機能を実現しますか?

select * from table where column_name = some_value;
パンダスでデータを取得するには、以下のような方法があります。
  • ブールインデックス
  • 位置インデックス
  • タグインデックス
  • は、API
  • を使用する。
    仮説データは以下の通りです
    
    import pandas as pd
    import numpy as np
    
    df = pd.DataFrame({'A': 'foo bar foo bar foo bar foo foo'.split(),
              'B': 'one one two three two two one three'.split(),
              'C': np.arange(8), 'D': np.arange(8) * 2})

    ブール索引
    この方法は、各行の条件に合致する真の値(true value)を探して、列Aの中の全ての値がfooに等しいということです。
    
    df[df['A'] == 'foo'] #         

    位置インデックス
    iloc法を使用して、インデックスの位置からデータを検索します。この例はまず条件に合った行の位置を見つける必要があります。
    
    mask = df['A'] == 'foo'
    pos = np.flatnonzero(mask) #     array([0, 2, 4, 6, 7])
    df.iloc[pos]
    
    #   iloc  
    df.iloc[:3,1:3]

    ラベル索引
    どのようにDataFrameの行列にもラベルが付いていますので、locの方法を使うのがいいです。
    
    df.set_index('A', append=True, drop=False).xs('foo', level=1) # xs         DataFrame     
    
    #        
    df.index=df['A'] #  A   DataFrame    
    df.loc['foo', :]
    
    #     
    df.loc[df['A']=='foo']

    APIを使うpd.DataFrame.query方法は、データ量が大きい場合、従来の方法より効率が高い。
    
    df.query('A=="foo"')
    
    #    
    df.query('A=="foo" | A=="bar"')

    データ抽出は前に述べただけではなく、最初の答えは以下のようないくつかの一般的な状況を示しています。
    1、選別出列値はスカラーの行に等しく、==
    
    df.loc[df['column_name'] == some_value]
    2、列を絞り出す値は、ある範囲の行に属します。isinで
    
    df.loc[df['column_name'].isin(some_values)] # some_values      
    3、複数の条件が制限されている場合の使用&、&の優先度は>==<=>より高いので、括弧の使用に注意してください。
    
    df.loc[(df['column_name'] >= A) & (df['column_name'] <= B)]
    4、列をフィルタする値は、ある/いくつかの値の行に等しくない
    
    df.loc[df['column_name'] != 'some_value']
    
    df.loc[~df['column_name'].isin('some_values')] #~  
    ここでは、pandsを使って指定された列の値を絞り出すための行に関する記事を紹介します。さらに、pandsフィルタの指定された列の値の内容については、以前の文章を検索したり、下記の関連記事を見たりしてください。これからもよろしくお願いします。