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

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

新規登録して質問してみよう
ただいま回答率
85.31%
データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

Python

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

3回答

1713閲覧

sktimeで時系列データの分析を行うためのデータフレーム作成

tetuzo

総合スコア2

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

Python

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2023/02/10 05:12

編集2023/02/10 07:24

以下のサイトを参考にsktimeで時系列データの分析を行いたいです。

自前のデータを用いて実施したいのですが、
データフレームの作成において、行の中に採番を付けて格納する方法がわかりません。

例として以下のsample.csvを読み込んで、イメージ説明

列名を採番としたデータフレーム(5rows × 1columns)を作りたいです。イメージ↓(わかりにくくてすみません。)

0 0 43 1 2 2 21 3 63
1 0 32 1 1 2 65 3 4
2 0 23 1 5 2 6 3 4
3 0 35 1 36 2 64 3 88
4 0 12 1 1 2 3 3 5

【試したこと】
新しく列名を付けて1つの列に配列としてまとめることはできましたが、採番が付けれませんでした。
イメージ説明

ご回答お願いします。

(url)https://www.salesanalytics.co.jp/software/sktime/sktime004/

【最終的な理想イメージ】
イメージ説明
イメージ説明
イメージ説明

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

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

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

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

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

lehshell

2023/02/10 09:58

【試したこと】には df['a'] = df.iloc[:,0:4].values.tolist() と 'a' 列の各セルにリスト形式で格納しようとしていますが、リストで格納したいのではないのですか? 意図を汲んで回答したつもりですが。。。
guest

回答3

0

列名を採番としたデータフレーム(5rows × 1columns)を作りたい

からは1つのセルにリストを入れたいように読めます。
もしそうであれば次のようにします。

Python

1import pandas as pd 2import io 3 4text = """ 543,2,21,63 632,1,65,4 723,5,6,4 835,36,64,88 912,1,3,5 10""" 11 12df = pd.read_csv(io.StringIO(text), header=None) 13df['a'] = df.apply(lambda row: sum(map(list, zip(range(len(df)), row)),[]), axis=1) 14df.drop(columns=df.iloc[:,0:-1], inplace=True) 15print(df) 16""" 17 a 180 [0, 43, 1, 2, 2, 21, 3, 63] 191 [0, 32, 1, 1, 2, 65, 3, 4] 202 [0, 23, 1, 5, 2, 6, 3, 4] 213 [0, 35, 1, 36, 2, 64, 3, 88] 224 [0, 12, 1, 1, 2, 3, 3, 5] 23"""

投稿2023/02/10 06:45

lehshell

総合スコア1178

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

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

0

データ分析についてはおいといて、あくまで元dfを目的のものに変形する方法のみ示します。
以下のような感じでできます。
もしかしたらnumpyの配列として扱った方が簡単かもしれませんが。

Python

1import pandas as pd 2from io import StringIO 3 4s="""43,2,21,63 532,1,65,4 623,5,6,4 735,36,64,88 812,1,3,5""" 9df = pd.read_csv(StringIO(s), header=None) 10 11# 必要な列を末尾に追加 12N_COL = len(df.columns) 13moves = [] # 列移動のための情報 14for i in df.columns: 15 ins = i+N_COL 16 df[ins] = i 17 moves += [ins,i] 18 19df = df.reindex(moves, axis='columns') # 列移動 20df.columns = [i for i in range(N_COL*2)]# 列名をリセット 21print(df) 22""" 23 0 1 2 3 4 5 6 7 240 0 43 1 2 2 21 3 63 251 0 32 1 1 2 65 3 4 262 0 23 1 5 2 6 3 4 273 0 35 1 36 2 64 3 88 284 0 12 1 1 2 3 3 5 29"""

投稿2023/02/10 06:15

can110

総合スコア38352

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

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

tetuzo

2023/02/10 06:41

丁寧なご回答ありがとうございます。 質問内容に付け加えたのですが、最終的に1列目に 得られた採番ごとの値を集約したいのですが どのようにすればいいでしょうか。 よろしければ回答をお願いします。
can110

2023/02/10 08:02

追記分はちゃんと読めておらず理解していませんが なんとなくデータの持ち方から見直した方がよいように思いました。 (行x列の2次元ではなく3次元が適切なのかも?) なので、この回答は最初の質問内容に対するものにとどめ、このまま修正しない予定です。
guest

0

ベストアンサー

参照されている記事を読んでみて、求めている結果を理解できました。pandas.Series 型インスタンスを要素とする5行1列のデータフレームを作成するのですね。

python

1X = pd.DataFrame(index=df.T._series.values()).rename_axis('a').reset_index() 2print(X.iloc[0].values[0]) 3 4# 0 43 5# 1 2 6# 2 21 7# 3 63 8# Name: 0, dtype: int64

イメージ説明

投稿2023/02/10 06:06

編集2023/02/10 13:37
melian

総合スコア21118

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

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

tetuzo

2023/02/10 06:42

丁寧なご回答ありがとうございます。 質問内容に付け加えたのですが、最終的に1列目に 得られた採番ごとの値を集約したいのですが どのようにすればいいでしょうか。 よろしければ回答をお願いします。
melian

2023/02/10 06:54

「最終的な理想イメージ」の図からは「最終的に1列目に得られた採番ごとの値を集約」がどれに当たるのか読み取ることができませんでした。できれば、サンプルデータでの期待する処理結果を提示していただけますか?
tetuzo

2023/02/10 07:23

質問内容が不適切で申し訳ありません。 サンプルデータでの期待する処理結果は 5行1列のデータフレームを作成し # a # 0 0 43 1 2 2 21 3 63 # 1 0 32 1 1 2 65 3 4 # 2 0 23 1 5 2 6 3 4 # 3 0 35 1 36 2 64 3 88 # 4 0 12 1 1 2 3 3 5 例として df.iloc[0,:].values[0]  #0番目の行の値を取り出す #0 43 #1 2 #2 21 #3 63 のようにしたいです。 リストにしてしまうと上の処理ができないのではないかと感じました。
melian

2023/02/10 07:35

回答を修正しましたが、それでしたら元々のデータフレームから抽出すればよいかと思いますが。。。
tetuzo

2023/02/10 07:56

お忙しい中、何度も回答ありがとうございます。ご指摘の通りです。 私のやりたいことはsktimeで時系列データを分析することで、 参考したurl先のサンプルコードは異状なく動き結果を確認できました。 そこで、自分が持っている時系列データを使って同様のことをしたいと 思って行ったのですが、データセットの作成でつまづきました。 そこでいろいろと調べたのですが、わからなかったため質問した経緯です。 拙い質問で申し訳ありません。
melian

2023/02/10 13:42

いえ、こちらこそ記事の内容を読んでから考えるべきでした。一応、補足しておきますと、X.iloc[0,:] と X.iloc[0] は同じ意味です。(結果も同じです)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問