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

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

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

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

pandas

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

Q&A

解決済

1回答

932閲覧

数値データ列から日付列を追加

tkxn

総合スコア23

Python

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

pandas

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

0グッド

0クリップ

投稿2021/08/18 00:57

編集2021/08/18 01:00

こんにちは、
日経225先物の1分足4本値を記録した以下のようなカンマ区切りのcsvデータN225ftM1m.csvがあります。

TradeDate,IntervalTime,Open,High,Low,Close,TradeVolume,ContractMonth
20210104,940,24700,24700,24700,24700,1,202512
20210104,1630,27525,27550,27525,27540,108,202101
20210104,1631,27535,27540,27530,27530,144,202101
...

ここから、チャートソフトのインプットとなる5分足、30分足、1時間足のcsvデータを作成するため、次の3つの行を追加しようとしていますが、うまくいきません。
1.resampleを使って5分足、30分足、1時間足を作成するIndexとするため、['TradeDate']と['IntervalTime']を結合させて"YYYY/MM/DD HH:MM"形式の['日付']行を追加
2.チャートソフトの仕様に合わせcsv出力するため、日付['TradeDate']から"YYYY/MM/DD"形式の['YMD']行、時間['IntervalTime']から"HH:MM"形式の['HM']行を追加

ちなみに

python

1print(df['TradeDate'].dtype) 2print(df['IntervalTime'].dtype) 3```はいずれもint64となります。 4 5以下分かる範囲で試してみた結果です。 6前述2について、 7```python 8import pandas as pd 9from datetime import date, timedelta, datetime 10 11df = pd.read_csv(r"C:...\N225ftM1m.csv", sep=",") 12df['YMD'] = pd.to_datetime(df['TradeDate'].astype(str)) 13print(df['YMD']) 14```とすると、 150 2021-01-04 161 2021-01-04 17 ... 18548982 2021-07-30 19548983 2021-07-30 20 21と日付にはなりますが、これを"YYYY/MM/DD"にする方法が分かりません。 22```python 23df['HM'] = pd.to_datetime(df['IntervalTime'].astype(str)) 24```はエラー"ValueError: Given date string not likely a datetime."となります。 25 261については残念ながらお手上げ状態です。 27 28ご教授いただければ幸いです。 29よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

以下のように、まず日時型に変更しましょう。
これを文字列にしたければstrftimeを使って変換してください。

python

1>>> print(df) 2 TradeDate IntervalTime Open High Low Close TradeVolume ContractMonth 30 20210104 940 24700 24700 24700 24700 1 202512 41 20210104 1630 27525 27550 27525 27540 108 202101 52 20210104 1631 27535 27540 27530 27530 144 202101 6>>> from datetime import datetime 7>>> df['datetime'] = df.apply(lambda row: datetime(row['TradeDate']//10000, row['TradeDate']//100%100, row['TradeDate']%100, row['IntervalTime']//100, row['IntervalTime']%100), axis=1) 8>>> print(df) 9 TradeDate IntervalTime Open High Low Close TradeVolume ContractMonth datetime 100 20210104 940 24700 24700 24700 24700 1 202512 2021-01-04 09:40:00 111 20210104 1630 27525 27550 27525 27540 108 202101 2021-01-04 16:30:00 122 20210104 1631 27535 27540 27530 27530 144 202101 2021-01-04 16:31:00 13>>> print(df['datetime']) 140 2021-01-04 09:40:00 151 2021-01-04 16:30:00 162 2021-01-04 16:31:00 17Name: datetime, dtype: datetime64[ns]

投稿2021/08/18 01:47

ppaul

総合スコア24666

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

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

tkxn

2021/08/18 07:44 編集

ありがとうございます! 関数により1列毎に['TradeDate']列、['IntervalTime']列の2個の数値データより年, 月, 日, 時, 分を算出し、これをdatetimeに変換するということでしょうか。 >これを文字列にしたければstrftimeを使って変換してください。 上記処理の後に('datetime'⇒'日付')、 df['YMD'] =df['日付'].dt.strftime('%Y/%m/%d') df['HM'] =df['日付'].dt.strftime('%H:%M') を加えたところ、期待した結果となりました。 どうもありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問