今、下記のようなarrayがあります。
array([[ 0., 25., 50., 75., 100.],
[ 0., nan, nan, nan, nan],
[ 0., 30., 60., 90., nan],
[ 0., 150., 235., nan, nan]])
① これを以下のように格納したいと考えております。
- 1行目から、variable1, 2, ...と名前をつけていきたい。
- nan のところは削除して、左に詰めたい
- 最終的には、これらを variables に格納したい。
variables = {'variable1': [0, 25, 50, 75, 100],
'variable2': [0],
'variable3': [0, 30, 60, 90],
'variable4': [0, 150, 235]
}
各行の要素は取れるのですが、これを順番に名前をつけて、variablesにまとめるところがよくわかりません。
よろしくお願いいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
a.py
python3
1 2data = [ 3 [ 0., 25., 50., 75., 100.], 4 [ 0., None, None, None, None], 5 [ 0., 30., 60., 90., None], 6 [ 0., 150., 235., None, None] 7] 8 9print(data) 10print() 11 12datax = [ ["variablle{}".format(i + 1), [x for x in row if x is not None]] for i, row in enumerate(data)] 13print(datax)
追記:
結果を list でなく、 dict にしました。
pprint をつかって整形して表示するようにしました。
python3
1import pprint 2 3pp = pprint.PrettyPrinter(width=60, compact=True) 4 5data = [ 6 [ 0., 25., 50., 75., 100.], 7 [ 0., None, None, None, None], 8 [ 0., 30., 60., 90., None], 9 [ 0., 150., 235., None, None] 10] 11 12pp.pprint(data) 13print() 14 15print() 16datax_dic = { "variablle{}".format(i + 1): [x for x in row if x is not None] 17 for i, row in enumerate(data)} 18pp.pprint(datax_dic)
追記:
numpy を import して、 arraym nan をつかったデータにして、処理をしました。
nam かどうかの判定は isnan() を使います。
参考:
nanの入れ替えをしたい
noneとnumpy.nanの違い
python3
1import numpy as np 2import pprint 3 4pp = pprint.PrettyPrinter(width=60, compact=True) 5 6data = np.array([ 7 [ 0., 25., 50., 75., 100.], 8 [ 0., np.nan, np.nan, np.nan, np.nan], 9 [ 0., 30., 60., 90., np.nan], 10 [ 0., 150., 235., np.nan, np.nan] 11]) 12 13pp.pprint(data) 14print() 15 16print() 17datax_dic = { "variablle{}".format(i + 1): [x for x in row if not np.isnan(x)] 18 for i, row in enumerate(data)} 19pp.pprint(datax_dic)
投稿2018/09/15 15:35
編集2018/09/16 08:22総合スコア22324
0
ベストアンサー
最終的には、これらを variables に格納したい。
variables = {'variable1': [0, 25, 50, 75, 100],
辞書型
にしたいのだと思いましたので、@katoyさんの回答コードを参考にkeyリスト
とvalueリスト
に分割してdict(zip())
で辞書作成してみました。
もっとスマートに書けると思いますが処理過程がわかり易いので小分けしてみました。
-追記-
※nanを扱うにはnumpyのインストールとimportが必要です
Python3
1# coding=UTF-8 2 3import numpy as np 4from numpy import nan 5# nan = "nanてなんだろう" 6 7array = ([[ 0., 25., 50., 75., 100.], 8[ 0., nan, nan, nan, nan], 9[ 0., 30., 60., 90., nan], 10[ 0., 150., 235., nan, nan]]) 11 12list_key = ["variable{}".format(i + 1) for i,row in enumerate(array) ] 13print(list_key) 14 15list_val = [[x for x in row if x is not nan] for row in array] 16print(list_val) 17 18variables = dict(zip(list_key,list_val)) 19print(variables) 20 21print("variables = {") 22i=0 23for k, v in (sorted(variables.items())): 24 print("'" + str(k) + "':" + str(v) ,end="") 25 if i == len(variables)-1: 26 print("") 27 else: 28 print(",") 29 i+=1 30print("}") 31
出力結果
['variable1', 'variable2', 'variable3', 'variable4'] [[0.0, 25.0, 50.0, 75.0, 100.0], [0.0], [0.0, 30.0, 60.0, 90.0], [0.0, 150.0, 235.0]] {'variable1': [0.0, 25.0, 50.0, 75.0, 100.0], 'variable2': [0.0], 'variable3': [0.0, 30.0, 60.0, 90.0], 'variable4': [0.0, 150.0, 235.0]} variables = { 'variable1':[0.0, 25.0, 50.0, 75.0, 100.0], 'variable2':[0.0], 'variable3':[0.0, 30.0, 60.0, 90.0], 'variable4':[0.0, 150.0, 235.0] }
投稿2018/09/15 20:36
編集2018/09/16 01:20総合スコア1009
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/15 22:41
2018/09/15 23:22 編集
2018/09/15 23:57
2018/09/16 00:33
2018/09/16 00:47
2018/09/16 01:15
2018/09/16 03:26 編集
2018/09/16 08:26
2018/09/16 10:37
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/15 23:58