2016-12-19 5 views
-1

私は馬のトラック情報のcsvファイルを読み込もうとしています。パンダでセルのグループからの値を計算する

私は、レース1のポストポジション(col 3)をフィールドqpts(col 210)の最大値でコーディングしようとしています。私はこれを研究する日数を費やしており、WebやYouTubeで明確な答えを見つけることはできません。

私は以下のコードを実行すると、私は

「.....シリーズの真理値があいまいな」取得
import pandas as pd 
import numpy as np 
pd.set_option('display.max_columns',100) 

df = pd.read_csv('track.csv', header=None, na_values=['.']) 

index = list(range(0,200,1)) 
columns = list(range(0,1484,1)) 

if df.ix[2]== 1: 
    qpts = (df.max([210])) 
    print (qpts) 
+0

レース#こんにちは2 –

+2

をCOLされ、あなたが提供することができますしてください一つの方法であるシリーズを生産する方法はいくつかあります。いくつかの行(例: 'df.head()')を例として挙げます。例がなければ、問題を把握するのが難しく、何をしたいのですか。 – Romain

+0

パンダの初心者には何らかの現象があり、どうにかして '.ix'を使う方向に移行する傾向があります。 '.ix'はあいまいである可能性があるのでほとんど使われません。可能であれば、 'iloc'または' .loc'が常に優先されるべきです。私はこのix病気の原因が... –

答えて

0

ここdf.ix[2]== 1シリーズを返すために起こっています。真実性のあるステートメントを実行できる単一の値にSeriesを結合するには、.any().all()などの関数を使用する必要があります。そうしてif文が実施される場合たとえば、私たちはシリーズの要素のいずれかどうかを確認するためにチェックされている上記の場合

import pandas as pd 
import numpy as np 
pd.set_option('display.max_columns',100) 

df = pd.read_csv('track.csv', header=None, na_values=['.']) 

index = list(range(0,200,1)) 
columns = list(range(0,1484,1)) 

if (df.ix[2]== 1).any(axis=1): 
    qpts = (df.max([210])) 
    print (qpts) 

は1に等しいです。我々はこれをしない場合は、次のように、我々は状況を持っている可能性があり:

print(df) 

Out[1]: 

    1 3 
    2 7 
    3 1 
    4 5 
    5 6 

print(df.ix[2]== 1) 

Out[2]: 

    1 False 
    2 False 
    3 True 
    4 False 
    5 False 

をそこでシリーズは、両方同時にTrueFalseだろう。

0

問題が

if df.ix[2] == 1です。 df.ix[2] == 1の式は、真値のpd.Seriesを返します。 ifを手前に置くと、一連の値をTrueまたはFalseとして評価しようとしています。これがエラーを投げています。

値が210で、インデックスはどこdf.ix[2] == 1

ものであり、これは

pd.Series(210, df.index[df.ix[2] == 1]) 
関連する問題