2017-08-05 24 views
0

生データフレーム(DF)フロートを含むなど、数値フィールドのみを選択:パンダのデータフレームから

 A B 
0 1 green 
1 2 red 
3 4.3 yellow 

をしよう:選択した後

 A B 
0 1 green 
1 2 red 
2 s blue 
3 4.3 yellow 
4 b black 

予想されるデータフレーム(DF)

どちらdf[df['A'].astype(str).str.isdigit()]をもdf[df['A'].astype(str).str.isdemical()]は期待される結果を得ることができますが、以下のようになります。

A  B 
0 1 green 
1 2 red 

希望:

  • isdigit()isdemical()pd.to_numeric(..., errors='coerce')を試してみてください

答えて

2

を失敗する理由を説明私は

  • 欲しいものを得るための方法:

    In [315]: df[pd.to_numeric(df.A, errors='coerce').notnull()] 
    Out[315]: 
        A  B 
    0 1 green 
    1 2  red 
    3 4.3 yellow 
    

    すべての非整数値が変換され、 NaN。その後、df.notnullを使用してブール値のマスクを取得し、インデックスのみを取得します。彼らは整数のみを探すため


    isdigit()isdecimal()の両方が失敗します。浮動小数点は有効であると認識されません。

  • +1

    私は数値を使用するつもりだったとあなただけ速くしなければなりませんでした! +1 –

    1

    別の簡単な方法は、すなわちisalpha != Truestr.matchすなわち

    df[df['A'].str.match(r'[+-]?([\d]*[.])?[\d]+')] 
    

    または

    を使用して

    df[df['A'].str.isalpha()!=True] 
    

    または

    df[~df['A'].str.isalpha()] 
    

    またはregexと逆の方法で行くことです

    df[~df['A'].str.match(r'[A-z]')] 
    

    出力:

     
        A  B 
    0 1 green 
    1 2  red 
    3 4.3 yellow 
    
    関連する問題