Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 获取错误“;ValueError:索引必须是单调的;_Python_Pandas_Datetime_Reindex - Fatal编程技术网

Python 获取错误“;ValueError:索引必须是单调的;

Python 获取错误“;ValueError:索引必须是单调的;,python,pandas,datetime,reindex,Python,Pandas,Datetime,Reindex,我有一些股票SRE的分钟数据,这是一个csv文件。我已经导入了它,并使用该数据创建了一个数据帧。然后我创建了一个滚动20天移动平均线,但我得到了一个错误。 代码是: import pandas as pd ticker = 'SRE' df = pd.read_csv('/Volumes/Seagate Portable/S&P 500 List/{}.txt'.format(ticker)) df.columns = ['Extra', 'Dates', 'Open', 'High',

我有一些股票SRE的分钟数据,这是一个csv文件。我已经导入了它,并使用该数据创建了一个数据帧。然后我创建了一个滚动20天移动平均线,但我得到了一个错误。 代码是:

import pandas as pd
ticker = 'SRE'
df = pd.read_csv('/Volumes/Seagate Portable/S&P 500 List/{}.txt'.format(ticker))
df.columns = ['Extra', 'Dates', 'Open', 'High', 'Low', 'Close', 'Volume']
df.drop(['Extra', 'Open', 'High', 'Volume', 'Low'], axis=1, inplace=True)
df.Dates = pd.to_datetime(df.Dates)
df.set_index('Dates', inplace=True)
df = df.between_time('9:30', '16:00')
df[f'MA {ticker}'] = df.rolling('20d').mean()
虽然我得到了错误:

ValueError                                Traceback (most recent call last)
<ipython-input-51-2c18a3d320d8> in <module>
      6 df.set_index('Dates', inplace=True)
      7 df = df.between_time('9:30', '16:00')
----> 8 df[f'MA {ticker}'] = df.rolling('20d').mean()
      9 
     10 # data[f'MA {ticker}'] = pd.Series

~/opt/anaconda3/lib/python3.8/site-packages/pandas/core/generic.py in rolling(self, window, min_periods, center, win_type, on, axis, closed)
  11234             )
  11235 
> 11236         return Rolling(
  11237             self,
  11238             window=window,

~/opt/anaconda3/lib/python3.8/site-packages/pandas/core/window/rolling.py in __init__(self, obj, window, min_periods, center, win_type, axis, on, closed, **kwargs)
    111         self.win_freq = None
    112         self.axis = obj._get_axis_number(axis) if axis is not None else None
--> 113         self.validate()
    114 
    115     @property

~/opt/anaconda3/lib/python3.8/site-packages/pandas/core/window/rolling.py in validate(self)
   1897         ):
   1898 
-> 1899             self._validate_monotonic()
   1900 
   1901             # we don't allow center

~/opt/anaconda3/lib/python3.8/site-packages/pandas/core/window/rolling.py in _validate_monotonic(self)
   1938         """
   1939         if not (self._on.is_monotonic_increasing or self._on.is_monotonic_decreasing):
-> 1940             self._raise_monotonic_error()
   1941 
   1942     def _raise_monotonic_error(self):

~/opt/anaconda3/lib/python3.8/site-packages/pandas/core/window/rolling.py in _raise_monotonic_error(self)
   1944         if self.on is None:
   1945             formatted = "index"
-> 1946         raise ValueError(f"{formatted} must be monotonic")
   1947 
   1948     def _validate_freq(self):

ValueError: index must be monotonic
ValueError回溯(最近一次调用)
在里面
6 df.设置索引(“日期”,就地=真)
7 df=时间间隔('9:30','16:00')之间的df
---->8 df[f'MA{ticker}']=df.rolling('20d').mean()
9
10#data[f'MA{ticker}]=pd.系列
~/opt/anaconda3/lib/python3.8/site-packages/pandas/core/generic.py处于滚动状态(self、window、min\u periods、center、win\u type、on、axis、closed)
11234             )
11235
>11236回程轧制(
11237自我,
11238窗口=窗口,
~/opt/anaconda3/lib/python3.8/site-packages/pandas/core/window/rolling.py in\uuuuuuuu init\uuuuuuuuuu(self、obj、window、min\u periods、center、win\u type、axis、on、closed、**kwargs)
111 self.win_freq=无
112 self.axis=obj.\u获取\u axis\u编号(axis)(如果axis不是None其他None)
-->113 self.validate()
114
115@property
验证中的~/opt/anaconda3/lib/python3.8/site-packages/pandas/core/window/rolling.py(self)
1897         ):
1898
->1899自我验证单调()
1900
我们不允许中锋
~/opt/anaconda3/lib/python3.8/site-packages/pandas/core/window/rolling.py in\u validate\u monotic(self)
1938         """
1939如果不是(self.\u on.是单调的\u递增还是self.\u on.是单调的\u递减):
->1940年self.\u raise\u单调错误()
1941
1942 def_raise_单调错误(self):
~/opt/anaconda3/lib/python3.8/site-packages/pandas/core/window/rolling.py in\u raise\u单调错误(self)
1944如果self.on为无:
“索引”
->1946 raise VALUERROR(f“{格式化的}必须是单调的”)
1947
1948定义验证频率(自):
ValueError:索引必须是单调的
df.sort\u索引(inplace=True)
就在
df.rolling('20D')
行之前


TimeSeries上的
.rolling()
函数要求按时间(-index)对行进行排序,即时间(-index)应稳步增加。这样做是为了防止用户预期不到的巨大计算成本。只需事先按索引排序即可满足该要求。

始终放置完整的错误消息(从word开始)回溯“)作为文本(不是截图)进行讨论(不是评论)。还有其他有用的信息。这里的错误非常清楚-索引(df.Dates)显然不是单调的-你应该检查你的数据,这意味着什么是单调的?(对不起,我是新来的)有一种方法可以改变这种情况吗?单调意味着这些值要么总是在减少,要么总是在增加。我不明白,如果它们是股票价格的话,为什么它们总是在增加或减少。它们不应该是任何数字吗?有没有一种方法可以使其单调。这些数据是一个很大的集合的一部分,是两个公司中的一个存在此问题的ies。我如何验证它,或者我只需要删除这些股票csv文件