d={(1,1):2,(1,2):2,(1,3):11,(1,4):2, (2,1):11,(2,2):2,(2,3):2,(2,4):2, (3,1):11,(3,2):2,(3,3):2,(3,4):11, (4,1):2,(4,2):2,(4,3):2,(4,4):11, (5,1):11,(5,2):2,(5,3):2,(5,4):2, }
上のようなd-(tuple):value-添え字のtupleをキーに値を辞書として表現するデータ形式にpython3.9でcsv形式のファイルを取り込んで、pandasを用いて変更したいのですがやり方が分かりません。
理由:
gurobiを用いて、最適化を行っている際に、手入力したデータでは出来たのですが、csvファイル形式でのデータでないといけないということを決められていたため、変更が必要であるからです。
求められる結果
print(d)
{(1,1):2,(1,2):2,(1,3):11,(1,4):2, (2,1):11,(2,2):2,(2,3):2,(2,4):2, (3,1):11,(3,2):2,(3,3):2,(3,4):11, (4,1):2,(4,2):2,(4,3):2,(4,4):11, (5,1):11,(5,2):2,(5,3):2,(5,4):2, }
csvファイル
csvファイルには、Excelで作成した
1,2,3,4, 2,2,11,2, 11,2,2,2, 11,2,2,11, 2,2,2,11, 11,2,2,2,
の1番上はindexで1,2,3,4で5×4の行列が入っています。
import pandas as pd import numpy as np d_data=pd.read_csv('d.csv') print(d_data) #d_data=(2,2,11,2, #11,2,2,2, #11,2,2,11, #2,2,2,11, #11,2,2,2) #d_n_data=np.array(d_data) #d_l_data=tolist(d_n_data) #print(d_n_data) result =tuple ([tuple(e) for e in d_data]) d_s_index=tuple() d_z_index=tuple() d_m_index=tuple() print(result) for i in P: for j in W: d_index=(i,j) d_t_index=tuple(d_index) d_m_index=d_s_index+d_t_index temp=d_m_index d_s_index=temp d_z_index=d_m_index d_m_index=tuple() print(d_z_index) d=zip(dict(d_z_index,result)) print(d)
実行結果 1 2 3 4 0 2 2 11 2 1 11 2 2 2 2 11 2 2 11 3 2 2 2 11 4 11 2 2 2 (('1',), ('2',), ('3',), ('4',)) (1, 1, 1, 2, 1, 3, 1, 4, 2, 1, 2, 2, 2, 3, 2, 4, 3, 1, 3, 2, 3, 3, 3, 4, 4, 1, 4, 2, 4, 3, 4, 4, 5, 1, 5, 2, 5, 3, 5, 4)
自分で試したこと
zip(dict)結合を試してみたのですが,うまくいきませんでした。
型がタプルであるため、要素を、(1,1),(1,2)という形に変更しようとしたのですが、やり方が分からず、一つのタプルになっているのが上の実行結果です。
numpyを用いて
print(d_data)は
arrayに変更すると5×4の行列にはなるのですが、
実行出来ませんでした。
エラーメッセージとして
dict expected at most1 arguments, got 2
と出ていました。
進捗がいきずまって本当に困っています。回答お願いします。
回答2件
あなたの回答
tips
プレビュー