🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python

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

Q&A

解決済

1回答

800閲覧

Datetimeindexで表したものの期間を延ばしたい

Sugawara-Miti

総合スコア2

Python

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

0グッド

0クリップ

投稿2020/12/21 01:36

前提・実現したいこと

Datetimeindexで表したものの期間を延ばしたい

発生している問題・エラーメッセージ

あるCsvファイルからデータを取り出したのですが,期間が2012-01-27 09:00:00から2012-10-23 08:00:00となっています.これの期間を延ばして2012-01-01 00:00:00から2013-01-01 00:00:00にする方法はありますか?間の期間は一時間刻みになっています.

問題となるデータ

python

1 index 層 水深(m) 最下層 水温() 塩分 DO飽和度(%) 2date 32012-01-27 09:00:00 19016 26.0 26.0 NaN NaN NaN NaN 42012-01-27 10:00:00 19046 26.0 26.0 NaN NaN NaN NaN 52012-01-27 11:00:00 19076 26.0 26.0 NaN NaN NaN NaN 62012-02-18 03:00:00 34676 26.0 26.0 NaN NaN NaN NaN 72012-02-18 04:00:00 34706 26.0 26.0 NaN NaN NaN NaN 8... ... ... ... ... ... ... ... 92012-08-22 05:00:00 168704 26.0 26.0 NaN NaN NaN NaN 102012-08-22 06:00:00 168734 26.0 26.0 NaN NaN NaN NaN 112012-08-22 07:00:00 168764 26.0 26.0 NaN NaN NaN NaN 122012-08-22 08:00:00 168794 26.0 26.0 NaN NaN NaN NaN 132012-10-23 08:00:00 213434 26.0 26.0 NaN NaN NaN NaN

中に入るデータはNan値として入れてかまいません.

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

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

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

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

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

guest

回答1

0

ベストアンサー

以下のexpand_dfを呼べば多分できるでしょう。

python

1import pandas as pd 2import numpy as np 3import datetime 4interval = datetime.timedelta(hours=1) 5 6def datetime_generator(start, end, interval=datetime.timedelta(hours=1)): 7 dt = start 8 while dt < end: 9 yield dt 10 dt += interval 11 return 12 13def make_df(df, s, e): 14 dt = list(datetime_generator(s, e)) 15 d = {df.index.name : dt} 16 for i in df.columns: 17 d[i] = [np.nan] * len(dt) 18 return pd.DataFrame(d).set_index(df.index.name) 19 20def dt64todt(dt64): 21 return datetime.datetime.utcfromtimestamp(dt64.astype(object)*1e-9) 22 23def expand_df(df, start, end): 24 df_start = min(datetime.datetime(*start), dt64todt(df.index.values[0])) 25 df_end = max(dt64todt(df.index.values[-1]) + interval, datetime.datetime(*end)) 26 expanded_df = make_df(df, df_start, df_end) 27 expanded_df.loc[df.index.values[0]:df.index.values[-1], :] = df 28 return expanded_df 29 30 31if __name__ == '__main__': 32 33 df = pd.DataFrame({'date' : [datetime.datetime(2012,1,27,9),datetime.datetime(2012,1,27,10)], 34 'index' : [19016,19046], 35 '層' : [26.0,26.0], 36 '水深(m)' : [26.0,26.0], 37 '最下層' : [np.nan,np.nan], 38 '水温(℃)' : [np.nan,np.nan], 39 '塩分' : [np.nan,np.nan], 40 'DO飽和度(%)' : [np.nan,np.nan]}).set_index('date') 41 42 print(expand_df(df, (2012,1,27,0), (2012,1,28,0)))

実行結果は以下です。

shell

1> python datetimeindex.py 2 index 層 水深(m) 最下層 水温() 塩分 DO飽和度(%) 3date 42012-01-27 00:00:00 NaN NaN NaN NaN NaN NaN NaN 52012-01-27 01:00:00 NaN NaN NaN NaN NaN NaN NaN 62012-01-27 02:00:00 NaN NaN NaN NaN NaN NaN NaN 72012-01-27 03:00:00 NaN NaN NaN NaN NaN NaN NaN 82012-01-27 04:00:00 NaN NaN NaN NaN NaN NaN NaN 92012-01-27 05:00:00 NaN NaN NaN NaN NaN NaN NaN 102012-01-27 06:00:00 NaN NaN NaN NaN NaN NaN NaN 112012-01-27 07:00:00 NaN NaN NaN NaN NaN NaN NaN 122012-01-27 08:00:00 NaN NaN NaN NaN NaN NaN NaN 132012-01-27 09:00:00 19016.0 26.0 26.0 NaN NaN NaN NaN 142012-01-27 10:00:00 19046.0 26.0 26.0 NaN NaN NaN NaN 152012-01-27 11:00:00 NaN NaN NaN NaN NaN NaN NaN 162012-01-27 12:00:00 NaN NaN NaN NaN NaN NaN NaN 172012-01-27 13:00:00 NaN NaN NaN NaN NaN NaN NaN 182012-01-27 14:00:00 NaN NaN NaN NaN NaN NaN NaN 192012-01-27 15:00:00 NaN NaN NaN NaN NaN NaN NaN 202012-01-27 16:00:00 NaN NaN NaN NaN NaN NaN NaN 212012-01-27 17:00:00 NaN NaN NaN NaN NaN NaN NaN 222012-01-27 18:00:00 NaN NaN NaN NaN NaN NaN NaN 232012-01-27 19:00:00 NaN NaN NaN NaN NaN NaN NaN 242012-01-27 20:00:00 NaN NaN NaN NaN NaN NaN NaN 252012-01-27 21:00:00 NaN NaN NaN NaN NaN NaN NaN 262012-01-27 22:00:00 NaN NaN NaN NaN NaN NaN NaN 272012-01-27 23:00:00 NaN NaN NaN NaN NaN NaN NaN

投稿2020/12/31 14:37

ppaul

総合スコア24670

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問