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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

pandas

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

Q&A

解決済

2回答

23617閲覧

Pandasの時系列グラフで不足データの補完をしない方法

6y0sid

総合スコア7

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

pandas

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

0グッド

0クリップ

投稿2017/12/25 09:05

###実現したいこと
現在、Pandasを使ってデータ分析の勉強をしています。
夏季平日の9時〜17時の8日分の1分データを分析しています。行数481行×8日=3848行
ソースコードの通りindexに'datetime'を割り当て、
parse_dates=Trueとすることでdtype='object'をdtype='datetime64[ns]'に変換して
データフレームに格納しています。

イメージ説明
イメージ説明
このデータフレームの'vT1[C]'を描画したところ以下の図のようになりました。

イメージ説明
時間軸は求めている通りになったのですが、時刻データが無い行(17:01~翌8:59および土日)
については欠損ではなく直線で補完されてしまいました。
これをデータが欠損しているような表現にしたいです。

どなたか教えていただけないでしょうか?よろしくお願いいたします。

###該当のソースコード

Python

1df = pd.read_csv('summer.csv',index_col='datetime',parse_dates=True) 2df['vT1[c]'].plot() #ちなみにmatplotlibを使っても同じ結果でした。

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

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

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

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

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

guest

回答2

0

データの無い箇所を NaN で補完する方法はreindex()を使うと簡単に実現できます。

Python

1# 歯抜けがない1分毎のDateteimeIndexを生成 2new_idx = pd.date_range(df.index[0], df.index[-1], freq='1min') 3# Indexの置き換え(元データが無い箇所は"NaN"とする)てPlotする 4df.reindex(new_idx, fill_value=np.nan) 5plt.show()

投稿2017/12/27 00:56

magichan

総合スコア15898

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

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

6y0sid

2017/12/28 03:53

上記方法でNaN補完ができました!ありがとうございます。
guest

0

ベストアンサー

これをデータが欠損しているような表現にしたいです。

Noneが途中に挟んであると途切れるようです。
https://stackoverflow.com/questions/14399689/matplotlib-drawing-lines-between-points-ignoring-missing-data

もしくは点が十分あることを期待して、ls='none'してmarker='.'のように点でプロットすればよいかと思われます。


結合方法に改善の余地しかありませんが、雰囲気だけ。

python

1import pandas as pd 2import matplotlib.pyplot as plt 3#等間隔時間インデックスを用意 4rng = pd.date_range('20110101', '20110103', freq='H') 5df_eq = pd.DataFrame({'data':np.nan} , index=rng) 6 7#よるの時間帯が抜けたデータを用意 8rng = pd.date_range('201101010700', '201101011900', freq='H') 9df = pd.DataFrame({'data': np.random.randn(len(rng))}, index=rng) 10rng = pd.date_range('201101020700', '201101021900', freq='H') 11t = pd.DataFrame({'data': np.random.randn(len(rng))}, index=rng) 12df = pd.concat([df, t]) 13 14#結合 15df = df.merge(df_eq, how='right', left_index=True, right_index=True) 16df.drop('data_y', axis=1, inplace=True) 17 18#プロット 19fig, ax = plt.subplots(dpi=200) 20df.plot(marker='.', ax=ax) 21plt.show()

投稿2017/12/25 09:40

編集2017/12/25 10:04
mkgrei

総合スコア8560

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

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

6y0sid

2017/12/26 08:07

ありがとうございます! 1分データでデータ数が多かったため、教えていただいた ls='none'、marker='.' とすることで違和感無く表現できました。 ラインで繋ぎたい場合はNaNを作るなどする必要があるのですね。回答の通り実施することでラインありも再現することができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問