用于库存数据的Python DataFrame - 删除功能不起作用

时间:2017-06-29 12:37:07

标签: python pandas dataframe stock

- hosts: localhost
  gather_facts: False

  vars:
    message: "\"Role name 'mgmt-ALERTPUBLISHER-uuid-placeholder' is not compliant. Use 'mgmt-ALERTPUBLISHER-b7d445b08a96e7f19ff0ff005686cddd', or do not use a name of the format <service name>-<roletype>-<arbitrary value>.\""

  pre_tasks:
  - debug:
      msg: "{{ message | regex_replace('^.*ALERTPUBLISHER-(?P<uuid>.{32}).*$', '\\g<uuid>') }}"

我有以上代码从quandl获取数据,它给出Date,Open High,Low,Adj Close,Close data

获取此数据后,我想将第1行(不是索引,数据行)删除到第10行,但使用上面给出的drop函数没有任何效果,它提供的数据与我们从quandl接收的数据相同。我希望专家可以用干净的代码来帮助我实现这个目标。请给我python3.6的代码

PLAY [localhost] *********************************************************************************************************************************************************************************************************************************************************************************************************************************************************

TASK [debug] *************************************************************************************************************************************************************************************************************************************************************************************************************************************************************
ok: [localhost] => {
    "msg": "b7d445b08a96e7f19ff0ff005686cddd"
}

PLAY RECAP ***************************************************************************************************************************************************************************************************************************************************************************************************************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=0

这是我在跌落功能之前和之后获得的数据;我希望日期15-06-2017到23-06-2017完整的行数据被删除,df只存储27,28行数据,在python3.6中完成它的有效方法是什么

2 个答案:

答案 0 :(得分:2)

我认为如果需要按位置选择,则需要按iloc选择数据;如果需要选择超出范围的日期,则需要boolean indexing

df = df.iloc[7:]
print (df)
              Open    High    Low  Adj Close  Close
Date                                               
2017-06-27  135.05  135.55  130.8     134.55  134.4
2017-06-28  134.10  136.80  132.5     136.55  136.3

df = df[(df.index > '2017-06-23') | (df.index < '2017-06-15')]
print (df)
              Open    High    Low  Adj Close  Close
Date                                               
2017-06-27  135.05  135.55  130.8     134.55  134.4
2017-06-28  134.10  136.80  132.5     136.55  136.3

differenceisin的解决方案:

df = df.loc[df.index.difference(pd.date_range('2017-06-15','2017-06-23'))]
print (df)
              Open    High    Low  Adj Close  Close
2017-06-27  135.05  135.55  130.8     134.55  134.4
2017-06-28  134.10  136.80  132.5     136.55  136.3
df = df[~df.index.isin(pd.date_range('2017-06-15','2017-06-23'))]
print (df)
              Open    High    Low  Adj Close  Close
Date                                               
2017-06-27  135.05  135.55  130.8     134.55  134.4
2017-06-28  134.10  136.80  132.5     136.55  136.3

但如果真的需要drop

df = df.drop(df.loc['2017-06-15':'2017-06-23'].index)
print (df)
              Open    High    Low  Adj Close  Close
Date                                               
2017-06-27  135.05  135.55  130.8     134.55  134.4
2017-06-28  134.10  136.80  132.5     136.55  136.3

答案 1 :(得分:0)

您可以使用between

start_date = pd.to_datetime("15-06-2017")
end_date = pd.to_datetime("23-06-2017") 
df[~df.reset_index().Date.between(start,end)]

输出

        Date    Open    High    Low  Adj_Close  Close
7 2017-06-27  135.05  135.55  130.8     134.55  134.4
8 2017-06-28  134.10  136.80  132.5     136.55  136.3