使用to_pydatetime()是正確的。
In [87]: t = pd.DataFrame({'date': [pd.to_datetime('2012-12-31'), pd.to_datetime('2013-12-31')]})
In [88]: t.date.dt.to_pydatetime()
Out[88]:
array([datetime.datetime(2012, 12, 31, 0, 0),
datetime.datetime(2013, 12, 31, 0, 0)], dtype=object)
當你將它回t.date
,它會自動將其轉換回datetime64
pandas.Timestamp是一個日期的子類反正:)
一種方式做該地塊於日期轉換爲Int64的:
In [117]: t = pd.DataFrame({'date': [pd.to_datetime('2012-12-31'), pd.to_datetime('2013-12-31')], 'sample_data': [1, 2]})
In [118]: t['date_int'] = t.date.astype(np.int64)
In [119]: t
Out[119]:
date sample_data date_int
0 2012-12-31 1 1356912000000000000
1 2013-12-31 2 1388448000000000000
In [120]: t.plot(kind='scatter', x='date_int', y='sample_data')
Out[120]: <matplotlib.axes._subplots.AxesSubplot at 0x7f3c852662d0>
In [121]: plt.show()
另一個解決方法是(不使用分散,但是...):
In [126]: t.plot(x='date', y='sample_data', style='.')
Out[126]: <matplotlib.axes._subplots.AxesSubplot at 0x7f3c850f5750>
而且,最後的解決辦法:
In [141]: import matplotlib.pyplot as plt
In [142]: t = pd.DataFrame({'date': [pd.to_datetime('2012-12-31'), pd.to_datetime('2013-12-31')], 'sample_data': [100, 20000]})
In [143]: t
Out[143]:
date sample_data
0 2012-12-31 100
1 2013-12-31 20000
In [144]: plt.scatter(t.date.dt.to_pydatetime() , t.sample_data)
Out[144]: <matplotlib.collections.PathCollection at 0x7f3c84a10510>
In [145]: plt.show()
這有一個問題在github,這是目前開放的。
我無法理解你真正想要的格式。你只想要約會嗎?還是時間?見例如http://codrspace.com/szeitlin/biking-data-from-xml-to-plots-part-2/ – szeitlin
我希望列'date'具有實際的'datetime.datetime'對象。由'to_pydatetime()'函數返回的那些。我不想在該列中使用'TimeStamp',因爲matplotlib無法使用它繪製散點圖。 – max