前提・実現したいこと
pandasのdataframeにおいて、要素の値に応じてif文を書きたいのですが、データ型?の問題でうまく実行されません。例えば次のようなコード
f = [[0,24],[21],[15, 18, 12, 11]] df = pd.DataFrame(index=[], columns=[]) for i in range(len(f)): #あるファイルの行数分だけ series = pd.Series(f[i]) df = df.append(series, ignore_index = True)
で、次のようなデータフレーム(df)ができます
||0|1|2|3|
|---|---|---|---|
|0|0.0|24.0|NaN|NaN|
|1|21.0|NaN|NaN|NaN|
|2|15.0|18.0|12.0|11.0|
これについて行ごとにある値(0.0)が含まれるかどうかで判定し、次の処理に繋げたいのですが、うまくいきません。
該当のソースコード
python3
1for k in range(len(df)): 2 for j in range(len(df.columns)): 3 if (df.isnull()[j][k] == True) and (0.0 in df.iloc[k]): 4 df.at[k,j] = -1 5 break
発生している問題・エラーメッセージ
結果が
||0|1|2|3|
|---|---|---|---|
|0|0.0|24.0|-1.0|NaN|
|1|21.0|-1.0|NaN|NaN|
|2|15.0|18.0|12.0|11.0|
となります。本来であれば(0,2)の要素はNaNのままであることを期待したいのですがそうはなっていないので、
0.0 in df.iloc[k]
の部分がうまくいっていないことになります。
試したこと
type(df[0][0])はnumpy.float64だったので、検索するときに0(int)ではなく0.0(float)とすれば問題ないと思っていたのですがうまくいきません。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー