私はちょっと不器用なタイトルをお詫びします。私は問題の核心を見ている。簡単に言えば、データフレームと、列または行の数と同じ長さのリストがあります。データフレームのnotnull
の値をリストの対応する値に置き換えたいと思います。ここでpandasデータフレームのnotnull値をリストの値で置き換える/ notnull値のインデックスを取得する方法/ブールインデックスの実装
は例です: 入力データフレーム:
a b c d
a 0.547825 NaN NaN 0.950158
b NaN 0.663845 0.529115 NaN
c NaN NaN NaN 0.685002
d NaN 0.791249 0.574452 0.734804
入力リスト:[1, 2, 3, 4]
所望の出力:
frame = pd.DataFrame(np.random.rand(4,4),index=['a','b','c','d'], columns=['a','b','c','d'])
frame = np.asarray(frame)
frame[frame<0.5] = np.nan
frame = pd.DataFrame(frame,index=['a','b','c','d'], columns=['a','b','c','d'])
result = np.zeros((4,4))
result = pd.DataFrame(result, index=['A','B','C','D'], columns=['A','B','C','D'])
Somenums = [1,2,3,4]
for i, col in enumerate(frame.columns.values):
print frame[col]
print np.isfinite(frame[col])
mask = frame.ix[np.isfinite(frame[col]),col]
print mask
print Somenums[mask]
result.iloc[:,i] = Somenums[mask]
print result
:
a b c d
a 1 NaN NaN 4
b NaN 2 3 NaN
c NaN NaN NaN 4
d NaN 2 3 4
これは、現在、私のコードです
しかし、私は受け取る:
TypeError Traceback (most recent call last)
<ipython-input-34-c95f4f5ee05b> in <module>()
24 mask = frame.ix[np.isfinite(frame[col]),col]
25 print mask
---> 26 print Somenums[mask]
27 result.iloc[:,i] = Somenums[mask]
28 print result
TypeError: list indices must be integers, not Series
は、どのように私は、インデックスには、適切に/正しくマスクを適用することができますか?
'Somenums [マスク]'の行を削除します。 'frame.iloc [frame.iloc [:、i] .notnull()。values、i] = Somenums [i]'はうまくいくはずですか? – Psidom
それは、華麗です! – durbachit
あなたが回答として投稿すると、私はそれを受け入れます。 – durbachit