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

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

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

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Q&A

0回答

473閲覧

「日付」と「時間、分」が飛んでいる場合に飛んでいる時間の行を追加する

Yoichi12

総合スコア6

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

0グッド

0クリップ

投稿2020/03/29 12:35

すみません、まったく初心者なので、一部でも答えていただければ嬉しいです。
phython3でanacondaのジュピターノートver6.02を使い実装をしております。
(If for文の扱いも調べてもうまく実装できないです。)

前提・実現したいこと

1日付と「時間、分」が記述しているデータがあります。

0 20200316 17:01:00 52.78 52.84 52.78 52.80 41
1 20200316 17:02:00 52.81 52.81 52.80 52.80 3
2 20200317 17:16:00 52.59 52.59 52.59 52.59 4
3 20200317 17:17:00 52.49 52.58 52.39 52.58 7

2一行下の行が1分差の場合、そのまま別ファイルに記述
0 20200316 17:01:00 52.78 52.84 52.78 52.80 41
1 20200316 17:02:00 52.81 52.81 52.80 52.80 3
2 20200317 17:16:00 52.59 52.59 52.59 52.59 4
3 20200317 17:17:00 52.49 52.58 52.39 52.58 7

0 20200316 17:01:00 52.78 52.84 52.78 52.80 41
1 20200316 17:02:00 52.81 52.81 52.80 52.80 3

③1行下の行が1分差以上開いている場合、一分後の行をデータをコピーして追加
0 20200316 17:01:00 52.78 52.84 52.78 52.80 41
1 20200316 17:02:00 52.81 52.81 52.80 52.80 3
2 20200317 17:16:00 52.59 52.59 52.59 52.59 4
3 20200317 17:17:00 52.49 52.58 52.39 52.58 7

0 20200316 17:01:00 52.78 52.84 52.78 52.80 41
1 20200316 17:02:00 52.81 52.81 52.80 52.80 3
2 20200316 17:03:00 52.81 52.81 52.80 52.80 3
3 20200316 17:03:00 52.81 52.81 52.80 52.80 3

… 20200317 17:16:00 52.59 52.59 52.59 52.59 4
20200317 17:17:00 52.49 52.58 52.39 52.58 7

エラーメッセージ

疑問1
print(dfraw.diff(axis=1))
で分の差分を出そうとしてもNanになります。

以下のコードなら秒数の差が出せますが、上行の差分を一つ一つ計算していく方法がわかりません。

import pandas as pd
dfraw = pd.read_csv('vxx__STK__1_min_TRADES.csv')

import datetime
dt1 = datetime.datetime.strptime('17:00:00', '%H:%M:%S')
input_time1 = dt1.time()
dt2 = datetime.datetime.strptime('17:01:00', '%H:%M:%S')
input_time2 = dt2.time()
print( (dt2-dt1).total_seconds())

疑問2
上が解決すれば、時間の差が出るのですが、それの条件で処理の違いをする
if for文の実装の仕方がわかりません。

疑問3
上の行と一分の差がでていたら、時間を足すというはできそうですが、
23:59分に一分足すと日付が一つ増える処理をどうすべきかわかりません。
日数と時間の行が分かれているのです。

こんなこともわからずお手を煩わせて本当に恐縮ですがお教え願えると幸いです。

よろしくお願いいたします。

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

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

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

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

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

hoshi-takanori

2020/03/29 19:52

日付と時刻の計算は全然「こんなこと」ではなく、いろいろ面倒くさいです。 基本的には日付と時刻を別々に考えるのではなく、両方合わせて datetime オブジェクトに変換して操作すべきだと思います。 https://qiita.com/motoki1990/items/8275dbe02d5fd5fa6d2d (UTC または日本時間だけなら細かいことは気にしなくても済みますが、夏時間があると 1:59 から 3:00 に飛んだり、逆に 1:59 から 1:00 に戻ったりしますので…。) https://qiita.com/belgianbeer/items/f678ae6264a674d33887
Yoichi12

2020/03/29 20:00

ご連絡ありがとうございます。やはりとても面倒なのですね。ありがとうございます。早速、頂いたリンクをみて勉強します。
Yoichi12

2020/03/29 20:06

ご連絡ありがとうございます。やはりややこしいのですね。頂いたリンクをみて、進めてみます。まずは、日付の行をdatetimeオブジェクトに変換→時間の列をdatetimeに変換→二つの列を合計の処理を自分なりにしらべて処理してみます。この度はありがとうございました。
Yoichi12

2020/03/29 20:25

調べてみました。 データを日付に変換する方法 https://pg-chain.com/python-datetime-strptime しかしながら一行にまとめてこの変換を適用する方法が上手く出てきません。 1日付と「時間、分」が記述しているデータがあります。 0 20200316 17:01:00 1 20200316 17:02:00 2 20200317 17:16:00 3 20200317 17:17:00 … ↑上の三列目をまとめて変えたい やり方や、やり方のキーワードを調べる方法などもし余裕があればお教えくださるとうれしいです。
magichan

2020/03/29 23:21 編集

元になっているデータがどのような形式となっているのかがわからないので、正確に答えることができません。 申し訳有りませんが vxxSTK1_min_TRADES.csv の内容を(ヘッダ行を含めて先頭の5行程度でよいので)コードブロックのマークダウンを使って記述していただけませんでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問