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

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

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

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python

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

pandas

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

Q&A

解決済

2回答

957閲覧

python pandasでcsvデータをresample後のcsv出力でエラーとなります

tkxn

総合スコア23

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python

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

pandas

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

0グッド

0クリップ

投稿2021/08/10 23:43

下記のような、日経225先物5分足のカンマ区切りのcsvデータN225FtM5m.csvがあります。
YMD列とHHMM列はこのデータを使用するチャートソフトの仕様に合わせるため、日付列より分けたものです。

日付 YMD HHMM 始値 高値 安値 終値 出来高
2021-01-04 00:00:00 2021/1/4 0:00 27520 27520 27520 27520 105
2021-01-04 00:05:00 2021/1/4 0:05 27510 27520 27500 27510 68
2021-01-04 00:10:00 2021/1/4 0:10 27500 27510 27500 27510 109
... ... ... ... ... ... ... ...
このデータからpython pandasのresampleで30分足データを作成してcsv出力しようとしたところエラーとなりました。

python

1import pandas as pd 2 3#日付列をindexとして5分足csvデータ読み込み、index_col=0で日付行がindexに指定されていると思います。 4df_5m = pd.read_csv(r"C:...\N225FtM5m.csv", sep=",", index_col=0,parse_dates=True) 5 6#30分足csvデータ作成 7d_ohlcv = {'始値': 'first', 8 '高値': 'max', 9 '安値': 'min', 10 '終値': 'last', 11 '出来高': 'sum'} 12 13df_30m=df_5m.resample('30min').agg(d_ohlcv) 14df_30m=df_30m.dropna(how='any') 15 16#チャートソフトの仕様に合わせるため最終行までの12000行を抽出 17Ln=len(df_30m) 18if Ln>12000: 19 df_30m=df_30m[Ln-12000:Ln] 20 21#チャートソフトの仕様のHDR'F:DTSHLEK'後に日付行以外の30分足データをcsv出力 22df_Hdr= pd.DataFrame(['F:DTSHLEK']) 23df_Hdr.to_csv(r"C:...\N225FtM30m.csv",header=False, index=False) 24 25df_30m.to_csv(r"C:...\N225FtM30m.csv",sep=",",columns=['YMD','HHMM','始値','高値','安値','終値','出来高'], mode='a', header=False) 26```エラーは以下の通りです。 27KeyError: "Passing list-likes to .loc or [] with any missing labels is no longer supported. 28The following labels were missing: Index(['YMD', 'HHMM'], dtype='object'). 29See https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#deprecate-loc-reindex-listlike" 30 3130分足のcsv出力の代わりに 32print(df_30m) 33を入れてみると以下のとおり30分毎に集約されたデータが出力されるので、データ自体は作成されていると思います。 34日付 YMD HHMM 始値 高値 安値 終値 出来高 ​ 352021-08-07 03:00:00 27905.0 27910.0 27895.0 27895.0 66 362021-08-07 03:30:00 27895.0 27900.0 27850.0 27850.0 201 37... ... ... ... ... ... ... ... 38 39また、https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#deprecate-loc-reindex-listlike"を見ると 40indexが不正というようなエラーのようでしたので、確かに30分足にまとめる段階でデータは6件ごとになっていると考え、行数を12000行にしたあとに 41df_30m = df_30m.reset_index(inplace=True,drop=True) 42としてみたのですがうまくいきませんでした。 43 44ご教示いただけますと幸いです。 45よろしくお願いいたします。

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

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

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

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

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

kirara0048

2021/08/11 00:47

エラーが出るのはどの行ですか?あと、`print(df_5m.columns)`の結果を貼ってみてもらえますか?
tkxn

2021/08/11 01:16

貴重なお時間ありがとうございます。 >エラーが出るのはどの行ですか? 最終行、 df_30m.to_csv(r"C:\...\N225FtM30m.csv",sep=",",columns=['YMD','HHMM','始値','高値','安値','終値','出来高'], mode='a', header=False) と思われます、この行をコメントアウトして代わりにprint(df_30m)で実行するとエラーとなりません。 >`print(df_5m.columns)`の結果を貼ってみてもらえますか? Index(['YMD', 'HHMM', '始値', '高値', '安値', '終値', '出来高'], dtype='object') と出力されました、なにか変ですよね!?
kirara0048

2021/08/11 01:46

あ、すみません間違えました、`print(df_30m.columns)`の結果を貼ってもらえますか? `df_5m.resample('30min').agg(d_ohlcv)`のところで'YMD'や'HHMM'が指定されていないので、df_30mからその列はなくなっているんじゃないかと……
tkxn

2021/08/11 03:43

>print(df_30m.columns)`の結果を貼ってもらえますか? Index(['始値', '高値', '安値', '終値', '出来高'], dtype='object') 確かに'YMD'や'HHMM'は表示されませんね、print(df_30m)では出てきたので問題ないとおもっていたのですが... >df_5m.resample('30min').agg(d_ohlcv)`のところで'YMD'や'HHMM'が指定されていないので、df_30mからその列はなくなっているんじゃないかと…… とするとd_ohlcvのところで'YMD'や'HHMM'のパラメーターを設定するということでしょうか?
guest

回答2

0

追記

やっぱり、エラーとしてはcsvに保存するときにYMD, HHMMがないことが原因っぽいですね。

d_ohlcvにYMD, HHMMを追加してやる(firstでよさそう?)か、resample後にYMD, HHMMを計算して追加する必要があります。

###元の回答

エラーは次の部分と思われます。

python

1df_30m=df_30m[Ln-12000:Ln]

python

1df_30m=df_30m.iloc[Ln-12000:Ln]

にすればいいのではないでしょうか。

[:]で指定するのはインデックスなので、今回の場合は日付列の値で指定しないといけないです。
行番号で指定したいので、ilocを使えばいいです。

投稿2021/08/11 06:20

編集2021/08/11 07:31
bsdfan

総合スコア4599

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

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

tkxn

2021/08/11 08:07

ご回答ありがとうございます。 ご指摘の箇所を df_30m=df_30m.iloc[Ln-12000:Ln] と変更してみたのですが、残念ながら同じエラーとなりました。 この部分は無関係のようです。
tkxn

2021/08/11 08:27

試しに最終行に print(df_30m['YMD'])とかprint(df_30m['HHMMDD'])を入れてみるとKeyErrとえらーになります。 print(df_30m['始値'])ですと正常に表示されます。 やはり、'YMD'と'HHMMDD'がdf_30mからなくなっているのですかね?
guest

0

自己解決

解決したようです!
>d_ohlcvにYMD, HHMMを追加してやる(firstでよさそう?)
d_ohlcvに

Python

1d_ohlcv = {'YMD': 'first','HHMM': 'first','始値': 'first','高値': 'max','安値': 'min','終値': 'last','出来高': 'sum'} 2```と'YMD','HHMM'の定義を追加し、to_csvのところにindex=Falseを追加したところ(これを入れないと'日付'行が出力される)、希望通りのcsvファイルが作成されました。 3 4皆様、アドヴァイスありがとうございました!

投稿2021/08/11 10:33

tkxn

総合スコア23

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問