2016-08-30 12 views
1

正しいタイトルではわかりません。しかし、私はデータフレームから列を取り出し、上位5つの結果を示す必要があります。列は、整数とn/aの結果の組み合わせです。パンダ注文列に値がありません

regiona col1 
a n/a 
a 1 
a 200 
b 208 
b 400 
b 560 
b 600 
c 800 
c 1120 
c 1200 
c 1680 
d n/a 
d n/a 

それで実行します:私はそのように私は別の列でこれを使用することができ、基本的な機能を作成し

import pandas as pd 
df = pd.read_csv('test_data.csv') 

、このように構成:

def max_search(indicator): 
    displaced_count = df[df[indicator] != 'n/a'] 
    table = displaced_count.sort_values([indicator], ascending=[False]) 
    return table.head(5) 
例として、私は基本的なデータフレームを作成します

でも実行したとき

max_search('col1') 

それは返します

  1. はN/A valyes
  2. 戻り上位5つの値をフィルタリング:

    regiona col1 
    7   c 800 
    6   b 600 
    5   b 560 
    4   b 400 
    3   b 208 
    

    だから、私は機能がやるべきことだと思うのステップである800よりも大きな何かを逃します。

しかし、800以上のものは返されません。非常に明白な何かが欠けていますか?

答えて

5

データフレームのdtypesを確認してください。現在はobjectです。したがって、まずcol1のデータ型が数値であることを確認してください。 pd.read_csv()で使用na_valuesとあなたの機能が期待どおりに動作します:

df = pd.read_csv('test_data.csv', na_values='n/a') 
# df.dtypes 
3

をあなたも行うことができます:

df['col1'] = pd.to_numeric(df['col1'], errors='coerce') 
df.dropna().sort_values(['col1'], ascending=False).head(5) 

    regiona col1 
10  c 1680.0 
9  c 1200.0 
8  c 1120.0 
7  c 800.0 
6  b 600.0 
関連する問題