プログラミング初心者なのですが、ラズパイで計測した電圧値を、0と1からなる8通りの配列に変換するコードを書いています。
電圧値と7通りの閾値をそれぞれ別のCSVを読み込んで、電圧値と閾値を比較した後、pandasのDataFrameに格納して、電圧計測時の時間と配列を書き出すことがしたいです。
具体的には、16個の電圧を同時に計測しており、配列を縦3列、横16列とする為、
計測時間は3行ずつ同じ時間ステップのものを書き出すという処理内容です。
しかし、配列と組み合わせたものをCSVに書き出す最中に、arrayがindexの長さと合わなくなってしまいます。
printを使って、変数の動きを確認する中で、0のみで構成される配列の時は、エラーにならないのですが、1を含む配列になる場合にエラーが発生することがわかりました。
しかし、なぜ0のみの配列でエラーが発生せずcsvの出力ができるのか、またどのように解決すればいいのかわかりません。
拙い説明で申し訳ありませんが、アドバイスなどありましたらご教授おねがいしたいです。
以下に私が作成したコードを添付しています。
冗長で読みにくいコードで申し訳ありませんが、ご検討のほどよろしくお願いいたします。
import csv import pandas as pd filename = '/home/pi/demo_5.csv' #read nama data df = pd.read_csv("/home/pi/0920211107_141234.csv", dtype ={'time': str, 'v1': int, 'v2': int, 'v3':int, 'v4':int, 'v5':int, 'v6':int, 'v7':int, 'v8':int, 'v9':int, 'v10':int, 'v11':int, 'v12':int, 'v13':int, 'v14':int, 'v15':int, 'v16':int}) #df = pd.read_csv("/home/pi/demo.csv", dtype ={'time': str, 'v1': int, 'v2': int, 'v3':int, 'v4':int, 'v5':int, 'v6':int, 'v7':int, 'v8':int, 'v9':int, 'v10':int, 'v11':int, 'v12':int, 'v13':int, 'v14':int, 'v15':int, 'v16':int}) #read th data df_1 = pd.read_csv("/home/pi/0920211107_135459.csv",index_col=0, dtype ={'time': str, 'v1': int, 'v2': int, 'v3':int, 'v4':int, 'v5':int, 'v6':int, 'v7':int, 'v8':int, 'v9':int, 'v10':int, 'v11':int, 'v12':int, 'v13':int, 'v14':int, 'v15':int, 'v16':int}) df_2 = pd.read_csv("/home/pi/0920211107_135712.csv",index_col=0, dtype ={'time': str, 'v1': int, 'v2': int, 'v3':int, 'v4':int, 'v5':int, 'v6':int, 'v7':int, 'v8':int, 'v9':int, 'v10':int, 'v11':int, 'v12':int, 'v13':int, 'v14':int, 'v15':int, 'v16':int}) df_3 = pd.read_csv("/home/pi/0920211107_135840.csv",index_col=0, dtype ={'time': str, 'v1': int, 'v2': int, 'v3':int, 'v4':int, 'v5':int, 'v6':int, 'v7':int, 'v8':int, 'v9':int, 'v10':int, 'v11':int, 'v12':int, 'v13':int, 'v14':int, 'v15':int, 'v16':int}) df_4 = pd.read_csv("/home/pi/0920211107_140001.csv",index_col=0, dtype ={'time': str, 'v1': int, 'v2': int, 'v3':int, 'v4':int, 'v5':int, 'v6':int, 'v7':int, 'v8':int, 'v9':int, 'v10':int, 'v11':int, 'v12':int, 'v13':int, 'v14':int, 'v15':int, 'v16':int}) df_5 = pd.read_csv("/home/pi/0920211107_140153.csv",index_col=0, dtype ={'time': str, 'v1': int, 'v2': int, 'v3':int, 'v4':int, 'v5':int, 'v6':int, 'v7':int, 'v8':int, 'v9':int, 'v10':int, 'v11':int, 'v12':int, 'v13':int, 'v14':int, 'v15':int, 'v16':int}) df_6 = pd.read_csv("/home/pi/0920211107_140345.csv",index_col=0, dtype ={'time': str, 'v1': int, 'v2': int, 'v3':int, 'v4':int, 'v5':int, 'v6':int, 'v7':int, 'v8':int, 'v9':int, 'v10':int, 'v11':int, 'v12':int, 'v13':int, 'v14':int, 'v15':int, 'v16':int}) df_7 = pd.read_csv("/home/pi/0920211107_140543.csv",index_col=0, dtype ={'time': str, 'v1': int, 'v2': int, 'v3':int, 'v4':int, 'v5':int, 'v6':int, 'v7':int, 'v8':int, 'v9':int, 'v10':int, 'v11':int, 'v12':int, 'v13':int, 'v14':int, 'v15':int, 'v16':int}) #get minval Th1 = df_1.min() Th2 = df_2.min() Th3 = df_3.min() Th4 = df_4.min() Th5 = df_5.min() Th6 = df_6.min() Th7 = df_7.min() #set 7 thresholds Allmin = pd.Series(Th1, index=['v1','v2','v3','v4','v5', 'v6', 'v7', 'v8', 'v9', 'v10', 'v11', 'v12', 'v13', 'v14', 'v15', 'v16']) R1R2min = pd.Series(Th2, index=['v1','v2','v3','v4','v5', 'v6', 'v7', 'v8', 'v9', 'v10', 'v11', 'v12', 'v13', 'v14', 'v15', 'v16']) R1R3min = pd.Series(Th3, index=['v1','v2','v3','v4','v5', 'v6', 'v7', 'v8', 'v9', 'v10', 'v11', 'v12', 'v13', 'v14', 'v15', 'v16']) R2R3min = pd.Series(Th4, index=['v1','v2','v3','v4','v5', 'v6', 'v7', 'v8', 'v9', 'v10', 'v11', 'v12', 'v13', 'v14', 'v15', 'v16']) R1min = pd.Series(Th5, index=['v1','v2','v3','v4','v5', 'v6', 'v7', 'v8', 'v9', 'v10', 'v11', 'v12', 'v13', 'v14', 'v15', 'v16']) R2min = pd.Series(Th6, index=['v1','v2','v3','v4','v5', 'v6', 'v7', 'v8', 'v9', 'v10', 'v11', 'v12', 'v13', 'v14', 'v15', 'v16']) R3min = pd.Series(Th7, index=['v1','v2','v3','v4','v5', 'v6', 'v7', 'v8', 'v9', 'v10', 'v11', 'v12', 'v13', 'v14', 'v15', 'v16']) v = pd.Series(data= [0,0,0,0,0,1,0,1,0,1,0,0,0,1,1,1,0,1,1,1,0,1,1,1]) t_row = 0 v_row = 0 #create 16 lists volt=[[]*i for i in range(16)] #Comparison with Thresholds for t_row in range(0,len(df)+1): for num in range(1, 17): df_value = df.iloc[v_row,num] if df_value > Allmin[num-1]: volt[num-1] = v[0:3] elif df_value > R1R2min[num-1]: volt[num-1] = v[3:6] elif df_value > R1R3min[num-1]: volt[num-1] = v[6:9] elif df_value > R2R3min[num-1]: volt[num-1] = v[9:12] elif df_value > R1min[num-1]: volt[num-1] = v[12:15] elif df_value > R2min[num-1]: volt[num-1] = v[15:18] elif df_value > R3min[num-1]: volt[num-1] = v[18:21] elif df_value < R3min[num-1]: volt[num-1] = v[21:24] print(num) print(df_value) print([df.iloc[t_row,0]]) print(volt[num-1]) df_1 = pd.DataFrame({"time": [df.iloc[t_row,0], df.iloc[t_row,0], df.iloc[t_row,0]], "v1": volt[0], "v2": volt[1], "v3": volt[2], "v4": volt[3], "v5": volt[4], "v6": volt[5], "v7": volt[6], "v8": volt[7], "v9": volt[8], "v10": volt[9], "v11": volt[10], "v12": volt[11], "v13": volt[12], "v14": volt[13], "v15": volt[14], "v16": volt[15]}) if v_row == 0: df_1.to_csv(filename, mode='w', header=True, index=False) if v_row >= 1: df_1.to_csv(filename, mode='a', header=False, index=False) v_row = v_row + 1
回答1件
あなたの回答
tips
プレビュー