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

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

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

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

8574閲覧

Python 複数のdfを格納するには(for文、List?)

HK--

総合スコア10

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/03/19 02:52

編集2020/03/19 06:51

前提・実現したいこと

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)のデータのみ出力される

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

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

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

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

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

meg_

2020/03/19 03:53

forループの中でシート名を変えてみたらどうでしょうか?
HK--

2020/03/19 04:38

可能ならば同一シートの中に出力したいと考えています。 出来そうでなければそちらの方法を試してみようと思います。 ありがとうございます。
t_obara

2020/03/19 04:39

そもそもSplineで得られる結果は期待通りの内容になっているかは確認されたのですか?
yureighost

2020/03/19 05:10

とりあえず動かしてみたのですが、 Spline関数内でstring型の数字がキーのdfに対して、 数値型の数字でアクセスしようとしているためKeyErrorになってます。 y = df[col].dropna().values
HK--

2020/03/19 06:42

t_obaraさん 掲載する際に変数を変えていたのでミスがありますね。 申し訳ありません、修正を加えます。
guest

回答1

0

ベストアンサー

スプライン補完の結果がお望みの物かはわかりませんが、
とりあえずこれで辞書リストの'0'、'1'、'2'全ての結果が書き出されます。
辞書型をDataframeでそのまま読ませるとキーがカラム列に並ぶ形になるので、
Excelでもそうなるように変換してますが、
気に入らない場合は、.to_excelの前の.Tを削除してください。

python

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[str(col)].count() 12 x = np.arange(Num) 13 y = df[str(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("output.xlsx") as writer: 22 pd.DataFrame([Spline(i) for i in range(0,3)]).T.to_excel(writer, sheet_name='Sheet1', index = None) 23 24#試したこと2 25def data(): 26 return [Spline(i) for i in range(0,3)]

投稿2020/03/19 08:01

yureighost

総合スコア2183

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

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

HK--

2020/03/19 09:37

#試したこと1に修正戴いたものが悩んでいたところでした! pd.DataFrameとfor文をこのように組み合わせる方法もあるのですね。 勉強させていただきました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問