質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

3回答

12791閲覧

辞書のキーで作製したNumPy配列を辞書の値に変更したい

tsujitsuji

総合スコア13

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

1グッド

0クリップ

投稿2018/08/28 01:28

編集2018/08/28 01:43

閲覧ありがとうございます。
pythonのNumPyを使用しプログラミングをしている際、困ったことがあり質問させていただきました。
辞書型で作製した際のキーをNumPy配列により並べ、その後キーに対応した辞書の値に変更をしたいです。

具体的には

python

1dic = {'a':1,'c':2,'d':3,'b':4} 2dic_keys = list(dic) 3dic_keys.sort() #リスト内のソートを行いたい 4print(dic_keys) 5np_dic_keys = np.array(dic_keys) 6print(np_dic_keys) 7```とした際、結果が['a' 'b' 'c' 'd']と出力されます。 8この後、それぞれnp_dic_keys内の'a''b''c''d'に対応する辞書の値「1,2,3,4」にnp_dic_keysの値を同じ形(行、列などを変えない)で変更したいです。 9 10最終的には辞書の値がpandasの2次元のデータフレームでも対応できるようにしたいと考えているのですが、どのように変更させればいいのかわからず困っております。 11 12解決方法や別の方法などがありましたらご教授頂ければ幸いです。 13 14よろしくおねがいします。
tachikoma👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hayataka2049

2018/08/28 02:02 編集

申し訳ないのですが、質問文を何回読んでも、どんなことをしたいのかよくわかりません。今書いてある内容をできるだけ整理してわかりやすくし、更にpandasのデータフレームの場合の具体的な例も示す必要があるかと
guest

回答3

0

「辞書の値がpandasの2次元のデータフレームでも対応できるようにしたい」の意味と、numpy.ndarray型にする理由がわかりませんが、

>>> dic = {'a':1,'c':2,'d':3,'b':4} >>> t = sorted(dic.items()) >>> t [('a', 1), ('b', 4), ('c', 2), ('d', 3)] >>> dic_keys, dic_values = zip(*t) >>> dic_keys ('a', 'b', 'c', 'd') >>> dic_values (1, 4, 2, 3)

でいいかと。

numpy.ndarray型にする部分は省きます(ここまでの話と関係がないので)。

https://docs.python.jp/3/library/stdtypes.html#dict.items
https://docs.python.jp/3/library/functions.html#zip の下の方のコード例

1行にまとめるとこう。

>>> dic = {'a':1,'c':2,'d':3,'b':4} >>> dic_keys, dic_values = zip(*sorted(dic.items())) >>> dic_keys ('a', 'b', 'c', 'd') >>> dic_values (1, 4, 2, 3)

投稿2018/08/28 02:11

編集2018/08/28 02:13
quickquip

総合スコア11038

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tsujitsuji

2018/08/28 02:21

申し訳ありません、まだDataFrameとnumpy.ndarrayとの違いがよく理解できておらず、がむしゃらに書いているところがあります。 質問の文章も明確にして、もう一度質問させていただこうとおもいます。 その際もご教授頂ければ嬉しいです。 よろしくお願いいたします。
guest

0

最終的には辞書の値がpandasの2次元のデータフレームでも対応できるようにしたいと考えているのですが

であれば、最初からDataFrame化したほうが楽なのではないでしょうか

Python

1import pandas as pd 2 3dic = {'a':1,'b':2,'c':3,'d':4} 4# DataFrame化 5df = pd.DataFrame({'key' : list(dic.keys()),'val' : list(dic.values())}) 6# KeyでSort 7df = df.sort_values('key') 8print(df) 9# key val 10#3 a 1 11#2 b 2 12#1 c 3 13#0 d 4

投稿2018/08/28 02:04

magichan

総合スコア15898

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tsujitsuji

2018/08/28 02:12

回答ありがとうございます。 最初からDataFrameにしておけばキーや値として考えなくてもいいということですね。 このほうが確かに扱いやすいと感じます。 抽象的に質問をしてしまったため、もう一度やりたいことをはっきりさせてから質問させていただきます。 その際ももしよろしければご教授頂ければ嬉しいです。
guest

0

ベストアンサー

dic.keys()をdic.values()にすればいいのでは?


key, valueの並びを一致させたいなら、それぞれをリストに分解するのがいいかも。

Python

1dic = {'a':1,'b':2,'c':3,'d':4} 2 3keys = list() 4values = list() 5 6for key, value in dic.items(): 7 keys.append(key) 8 values.append(value)

こういうことかな??

Python

1sorted_keys = sorted(dic) # 昇順に並んだkeyを取得 2 3values = [] 4for key in sorted_keys: # sort済みのkeyを順番に舐める 5 values.append(dic[key])

投稿2018/08/28 01:34

編集2018/08/28 01:53
tachikoma

総合スコア3601

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tsujitsuji

2018/08/28 01:39

回答ありがとうございます。 質問の書き方が悪くて申し訳ありません。 記入していませんでしたが、一度辞書のキーをリストに格納しているのはリスト内でソートさせてからnp配列にしたいと考えているからです。ですので辞書のキーと値が独立している状態で値に変更をさせたく考えております。 ご教授頂ければ嬉しく思います。 質問内容の修正も行っておきます。
tachikoma

2018/08/28 01:42

sort後のkey順でvaluesを作りたいということですかな?
tsujitsuji

2018/08/28 01:46

ありがとうございます。 はい、そのvaluesをnumpy配列の並び(例えば2次元配列ならその配列の状態)のままvaluesを出力させたいと考えております。 初心者で回答いただいたプログラムの理解に時間がかかっておりますが理解してみます。
tachikoma

2018/08/28 01:59

一部追記しましたが、もしかしたら質問をちゃんと理解できてないかもしれません。
tsujitsuji

2018/08/28 02:03

ありがとうございます! これを基にしてプログラミングしてみます。 またわからないことがありましたら、よろしくお願いします。
tsujitsuji

2018/08/28 02:06

最終的に2次元のnp配列?に辞書の値が2次元のデータフレームを配列の並びのまま入れたいと考えておりますので、その時に質問させてもらうかもしれません。 よろしくお願いします。
tachikoma

2018/08/28 02:07

ここではpandas, numpyを使わずにPythonの標準的な機能だけでやっています。最終的にやりたいことを踏まえて、まぎちゃんの回答も見といて下さいね。
tsujitsuji

2018/08/28 02:15

はい。具体的にわからないところをはっきりさせてもう一度質問させていただこうと思います。 初心者ですがよければ今後ともよろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問