我是Python的初学者并尝试绘制数据。如果我在文档(https://pandas.pydata.org/pandas-docs/stable/10min.html)中关注10分钟的熊猫,它可以正常工作。但如果我尝试将它应用于我自己的数据(从雅虎下载),它就会失败。
问题似乎与数据准备有关。如果我打开csv文件,数据看起来很好。我尝试选择列来绘制一列数据更改为NaN的那一刻。如果将数据系列放入系列中,则会发生这种情况。 'index ='系列看起来不错。这与我在该系列中添加的列无关。因此,最终的情节是空的。
我无法弄清楚原因。起初我认为它与数据类型有关,但是如果我看一下dtypes我会说它应该没问题,同时强制数据浮动或int也没有什么区别。
为什么数据会变为NaN? 如何防止它改变以便可以绘制?
-------- Code -----------------------------------
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
symbol = 'c:\\xlk'
filename = '%s.csv' % (symbol)
data = pd.read_csv(filename)
print(data.tail())
print(data.dtypes)
dacl = data['Close']
dada = data['Date']
ts = pd.Series( data['Close'], index=data['Date'])
print(ts.tail())
ts.plot()
-----------------------------------------------------------
---------output-------------------------------------------
Date Open High Low Close Adj Close \
4826 2018-02-28 69.050003 69.339996 68.160004 68.169998 68.169998
4827 2018-03-01 68.330002 68.589996 66.529999 67.040001 67.040001
4828 2018-03-02 66.279999 67.820000 66.099998 67.680000 67.680000
4829 2018-03-05 67.360001 68.599998 67.209999 68.370003 68.370003
4830 2018-03-06 68.760002 68.849998 68.220001 68.519997 68.519997
Volume
4826 15232000
4827 21486800
4828 19196100
4829 10888900
4830 9884600
Date object
Open float64
High float64
Low float64
Close float64
Adj Close float64
Volume int64
dtype: object
Date
2018-02-28 NaN
2018-03-01 NaN
2018-03-02 NaN
2018-03-05 NaN
2018-03-06 NaN
Name: Close, dtype: float64
<matplotlib.axes._subplots.AxesSubplot at 0x1c3fafc9d30>
答案 0 :(得分:1)
我认为您需要DatetimeIndex
参数index_col
和parse_dates
:
data = pd.read_csv(filename, index_col=['Date'], parse_dates=['Date'])
print (data.index)
DatetimeIndex(['2018-02-28', '2018-03-01', '2018-03-02', '2018-03-05',
'2018-03-06'],
dtype='datetime64[ns]', name='Date', freq=None)
然后绘制一列:
data['Close'].plot()
获取NaN
s的原因是数据未对齐data['Close']
的索引与data['Date']
不同:
ts = pd.Series( data['Close'], index=data['Date'])
可能的解决方案(丑陋):
ts = pd.Series( data['Close'].values, index=data['Date'])