前提・実現したいこと
dfで取得したデータを4次スプライン補間を行いデータのサンプルアップ、ダウンをしたのち、
再度df型に格納したいのですが
複数のdf(0,1,2)を取得し出力する方法でつまずいています。
最終的には、Excellファイルにdf型で出力したいと考えています。
※Openpyexでの出力は実行できたのですが、出力される形がいまいちだったのでdfで出力をしたいと考えています。よろしくお願いいたします。
該当のソースコード
Pyton
1import pandas as pd 2import numpy as np 3from scipy.interpolate import interp1d 4 5df = pd.DataFrame({ '0' : [1,2,3,4,5,6,7,8,9,10], 6 '1' : [2,4,6,8,10,12,14,16,18,20], 7 '2' : [1,3,6,9,12,14,16,18,21,24]}) 8 9#スプライン補完 10def Spline(col): 11 Num = df[col].count() 12 x = np.arange(Num) 13 y = df[col].dropna().values 14 f = interp1d(x, y, kind='cubic') 15 k = np.linspace(0,Num-1, num=20) 16 spline = f(k) 17 return spline 18 19#データ出力 20#試したこと1 21with pd.ExcelWriter(".xlsx") as writer: 22 for i in range(0,1): 23 pd.DataFrame(Spline(i)).to_excel(writer, sheet_name='Sheet1', index = None) 24 25#試したこと2 26def data(): 27 Spline_list = [] 28 for i in range(0,2): 29 Spline = Spline(i).tolist() 30 Spline.append(i) 31 i += 1 32 return Spline_list 33 34#試したこと2 35def data(): 36 Spline_list = [] 37 for i in range(0,2): 38 Spline = Spline(i).tolist() 39 Spline.append(i) 40 i += 1 41 return Spline_list
試したこと
①エクセルに出力する際に、for文で回してみる
➡︎最後の行(df, 3)のデータのみ出力される
②リストに格納する
➡︎同様に最後の行(df, 3)のデータのみ出力される
forループの中でシート名を変えてみたらどうでしょうか?
可能ならば同一シートの中に出力したいと考えています。
出来そうでなければそちらの方法を試してみようと思います。
ありがとうございます。
そもそもSplineで得られる結果は期待通りの内容になっているかは確認されたのですか?
とりあえず動かしてみたのですが、
Spline関数内でstring型の数字がキーのdfに対して、
数値型の数字でアクセスしようとしているためKeyErrorになってます。
y = df[col].dropna().values
t_obaraさん
掲載する際に変数を変えていたのでミスがありますね。
申し訳ありません、修正を加えます。
回答1件
あなたの回答
tips
プレビュー