数据更改为NaN

时间:2018-03-10 10:07:17

标签: python pandas

我是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>

1 个答案:

答案 0 :(得分:1)

我认为您需要DatetimeIndex参数index_colparse_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'])