web-dev-qa-db-ja.com

Pandasおよび日時形式を使用したプロット

DateとClosingPriceの2列のみのデータフレームがあります。私はdf.plot()を使用してそれらをプロットしようとしていますが、このエラーが発生し続けます:

ValueError:表示制限の最小-36785.37852は1未満であり、無効なMatplotlibの日付値です。これは、日時単位を持つ軸に日時以外の値を渡すとよく起こります

私はmatplotlibからこれに関するドキュメントを見つけましたが、それは形式が日時であることを確認する方法を示しています。ここにコードを示します。フォーマットが日時であることを確認し、プロットを試みる前に各列のデータ型を出力します。

df.Date = pd.to_datetime(df.Date)

print(df['ClosingPrice'].dtypes)
print(df['Date'].dtypes)

これらの印刷ステートメントの出力は次のとおりです。

float64 datetime64 [ns]

プロットする前にデータ型を検証しているため、問題が何であるかわかりません。また、データセットの最初の数行は次のようになります。

Date ClosingPrice 0 2013-09-10 64.7010 1 2013-09-11 61.1784 2 2013-09-12 61.8298 3 2013-09-13 60.8108 4 2013-09-16 58.8776 5 2013-09-17 59.5577 6 2013-09-18 60.7821 7 2013-09-19 61.7788助けていただければ幸いです。

12
MathPhiz

最新編集ここで終わる人が増えた後。新しい人がpythonを使用することを明確にするには、以下のコードを機能させるために、まずpandasをインポートする必要があります。

_import pandas as pd
_

最初にインデックスをDatetime列として設定してみてください。

_df.set_index('Date', inplace=True)
_

念のため、インデックスのdtypeを設定してみてください(編集:これはおそらく以前のように必要ないでしょう):

_df.index = pd.to_datetime(df.index)
_

そして、それをプロットします

_df.plot()
_

これが問題を解決するのは、DataFrameオブジェクトから.plot()を使用すると、X軸が自動的にDataFrameのインデックスになるためです。

DataFrameにDatetimeindexと2つの他の列(たとえば_['Currency','pct_change_1']_)があり、そのうちの1つだけ(たとえば_pct_change_1_)をプロットしたい場合:

_# single [ ] transforms the column into series, double [[ ]] into DataFrame
df[['pct_change_1']].plot(figsize=(15,8)) 
_

ここで、figsize=(15,8)はプロットのサイズを設定しています_(width, height)_。

最終編集:

³元のインデックスを削除したくない場合は、次のこともできます。

_df[['Date','ClosingPrice']].plot('Date', figsize=(15,8))
_
14
mrbTT