やりたいことは,リストと複数の配列を計算して,計算結果の配列を空の配列に追加していきたいです.
python
1import pandas as pd 2import numpy as np 3 4# データ読み込み 5Ds1 = pd.read_excel('sample.xlsx', '--') 6Ds2 = pd.read_excel('sample.xlsx', '-') 7# データ名(実際はすでにエクセルに下記のデータ名が入力されている) 8L5 = ['W-A0', 'W-B0', 'W-F0', 'W-C1', 'W-E1', 'W-A2', 'W-B2', 'W-D2', 'W-F2', 'W-C3', 'W-E3', 9 'W-A4', 'W-B4', 'W-F4'] 10 11# リスト 12dL = list(range(100, 2100, 200)) 13B = np.zeros((0, Ds1.values.shape[0])) 14 15# 計算 16for i in range(0,2): 17 A1 = dL[i] + Ds2.loc[:, Ds2.columns.str.contains(r'(?=.*W)(?=.*%s)' % i)].values + Ds1.loc[:, Ds1.columns.str.contains(r'(?=.*W)(?=.*%s)' % i)].values 18 B = np.r_[B, A1.reshape(1, -1)] 19B.T
Ds1,2ともにshapeは(164,14)の数値列,数値はランダムです.
また両方ともcolumnsは上記コード内のリストL5です.
発生エラー
--------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-28-2163de09022c> in <module>() 16 for i in range(0,2): 17 A1 = dL[i] + Ds2.loc[:, Ds2.columns.str.contains(r'(?=.*W)(?=.*%s)' % i)].values + Ds1.loc[:, Ds1.columns.str.contains(r'(?=.*W)(?=.*%s)' % i)].values ---> 18 B = np.r_[B, A1.reshape(1, -1)] 19 B.T C:\lib\site-packages\numpy\lib\index_tricks.py in __getitem__(self, key) 336 objs[k] = objs[k].astype(final_dtype) 337 --> 338 res = _nx.concatenate(tuple(objs), axis=self.axis) 339 return self._retval(res) 340 ValueError: all the input array dimensions except for the concatenation axis must match exactly
for文のA1までは動くのですが,Bのところでエラーが発生します.改善できないでしょうか.
以下のコードではうまくいくのですが,上記ではなぜできないのか原因がわかりません.
python
1import pandas as pd 2import numpy as np 3 4# データ 5Ds1 = pd.DataFrame(np.random.randn(10, 2), columns=['L-0','L-1']) 6Ds2 = pd.DataFrame(np.arange(30).reshape(10, 3), columns=['L-0','L-1','L-2']) 7 8dL = list(range(100, 2100, 200)) 9dL1 = [100, 300, 450, 600, 750, 900] 10B = np.zeros((0, Ds1.values.shape[0])) 11 12# 計算 13for i in range(0,2): 14 A1 = dL[i] + Ds2.loc[:, Ds2.columns.str.contains(r'(?=.*%s)' % i)].values + Ds1.loc[:, Ds1.columns.str.contains(r'(?=.*%s)' % i)].values 15 B = np.r_[B, A1.reshape(1, -1)] 16 17B.T
提示ソースには「np.arange(30).reshape(10, 2)」など明らかな誤りがあります。また質問文も抽象的で具体的にどうしたいのかが不明です。整理し明確にしないと回答得るのは厳しいと思います。
失礼いたしました.ご指摘いただきありがとうございます.コード等修正しました.
追記ありがとうございます。最初のソースにおいて①発生エラー全文(Traceback)②Ds1,Ds2の行列数や具体的なデータ内容(他人がコード実行できて再現できるもの)を追記ください。
何度も申し訳ありません.修正しました.
「~.columns.str.contains(r'(?=.*W)(?=.*%s)')」の意図するところ、どんな列を抽出したいかを説明ください
上記コードでは,L5リストのデータ名においてWとfor文のiに入力される数が含まれるデータ名の列を抽出したいです.
返答ありがとうございます。前回の質問、誤りがありましたので修正しました。失礼しました。で、抽出したい列名ですが、i=0で['W-A0', 'W-B0', 'W-F0']の3列、i=1で['W-C1', 'W-E1']の2列というのは意図した動作になっていますでしょうか?
説明不足で申し訳ありません.はい,そのような動作を考えています.列数がバラバラでも計算できればと
回答1件
あなたの回答
tips
プレビュー