2016-07-26 6 views
2

私は、次のデータフレームを持っている:Pandas DataFrameからインデックス/列/データを抽出する方法論理演算に基づいていますか?

import numpy as np 
import pandas as pd 
data = np.random.rand(5,5) 
df = pd.DataFrame(data, index = list('abcde'), columns = list('ABCDE')) 
df = df[df>0] 
df 
      A   B   C   D E 
a  NaN 2.038740 1.371158  NaN NaN 
b 0.575567  NaN 0.462007  NaN NaN 
c 0.984802 0.049818 0.129836  NaN NaN 
d  NaN  NaN  NaN  NaN NaN 
e 0.789563 1.846402  NaN 0.340902 NaN 

私は非NANデータの全て(インデックス、COL_NAME、値)を取得したいです。どうすればいいのですか?

私の予想結果は次のとおりです。

[('b','A', 0.575567), ('c', 'A', 0.984802), ('e', 'A', 0.789563),...] 
+0

私は 'data'は' np.random.randn'ではなく 'np.random.randn'でなければならないと思います。後者は決して否定的ではない。 – ayhan

答えて

4

あなたは自動的にNA値をドロップして、インデックスが列にリセットされるデータフレームを、スタックすることができ、のリストに変換しやすいだろうその後タプル:

[tuple(r) for r in df.stack().reset_index().values] 

# [('a', 'B', 2.03874), 
# ('a', 'C', 1.371158), 
# ('b', 'A', 0.575567), 
# ('b', 'C', 0.46200699999999995), 
# ('c', 'A', 0.9848020000000001), 
# ('c', 'B', 0.049818), 
# ('c', 'C', 0.12983599999999998), 
# ('e', 'A', 0.789563), 
# ('e', 'B', 1.846402), 
# ('e', 'D', 0.340902)] 

または使用するデータフレームto_records()方法:

list(df.stack().reset_index().to_records(index = False)) 
関連する問題