짧은 답변 : 당신은 할 수 없습니다이 이제까지 "문제가 발생할"수없는 이유는 분명하지 않다. '날짜'이름은 열과 다른 DataFrame의 색인 이름을 지정합니다. 이 옵셋을 사용하여 인쇄되므로 프레임의 열과 혼동하지 않습니다. 아래에 따라 DataFrame['Date']
와 날짜에 슬라이스 않을 것이다 :
는
>>> import numpy as np; import pandas; import datetime
>>> dfrm = pandas.DataFrame(np.random.rand(10,3),
... columns=['A','B','C'],
... index = pandas.Index(
... [datetime.date(2012,6,elem) for elem in range(1,11)],
... name="Date"))
>>> dfrm
A B C
Date
2012-06-01 0.283724 0.863012 0.798891
2012-06-02 0.097231 0.277564 0.872306
2012-06-03 0.821461 0.499485 0.126441
2012-06-04 0.887782 0.389486 0.374118
2012-06-05 0.248065 0.032287 0.850939
2012-06-06 0.101917 0.121171 0.577643
2012-06-07 0.225278 0.161301 0.708996
2012-06-08 0.906042 0.828814 0.247564
2012-06-09 0.733363 0.924076 0.393353
2012-06-10 0.273837 0.318013 0.754807
>>> dfrm['Date']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/pandas/core/frame.py", line 1458, in __getitem__
return self._get_item_cache(key)
File "/usr/local/lib/python2.7/dist-packages/pandas/core/generic.py", line 294, in _get_item_cache
values = self._data.get(item)
File "/usr/local/lib/python2.7/dist-packages/pandas/core/internals.py", line 625, in get
_, block = self._find_block(item)
File "/usr/local/lib/python2.7/dist-packages/pandas/core/internals.py", line 715, in _find_block
self._check_have(item)
File "/usr/local/lib/python2.7/dist-packages/pandas/core/internals.py", line 722, in _check_have
raise KeyError('no item named %s' % str(item))
KeyError: 'no item named Date'
긴 대답 : 당신이 그것을 원한다면
당신 은 자신의 컬럼에 인덱스를 추가하여 DataFrame을 변경할 수 있습니다 그렇게 인쇄하십시오. 예를 들어 : 인쇄되지 않도록이 후
>>> dfrm['Date'] = dfrm.index
>>> dfrm
A B C Date
Date
2012-06-01 0.283724 0.863012 0.798891 2012-06-01
2012-06-02 0.097231 0.277564 0.872306 2012-06-02
2012-06-03 0.821461 0.499485 0.126441 2012-06-03
2012-06-04 0.887782 0.389486 0.374118 2012-06-04
2012-06-05 0.248065 0.032287 0.850939 2012-06-05
2012-06-06 0.101917 0.121171 0.577643 2012-06-06
2012-06-07 0.225278 0.161301 0.708996 2012-06-07
2012-06-08 0.906042 0.828814 0.247564 2012-06-08
2012-06-09 0.733363 0.924076 0.393353 2012-06-09
2012-06-10 0.273837 0.318013 0.754807 2012-06-10
, 당신은 단순히 인덱스의 이름을 변경할 수 있습니다 :
>>> dfrm.reindex(pandas.Series(dfrm.index.values, name=''))
A B C Date
2012-06-01 0.283724 0.863012 0.798891 2012-06-01
2012-06-02 0.097231 0.277564 0.872306 2012-06-02
2012-06-03 0.821461 0.499485 0.126441 2012-06-03
2012-06-04 0.887782 0.389486 0.374118 2012-06-04
2012-06-05 0.248065 0.032287 0.850939 2012-06-05
2012-06-06 0.101917 0.121171 0.577643 2012-06-06
2012-06-07 0.225278 0.161301 0.708996 2012-06-07
2012-06-08 0.906042 0.828814 0.247564 2012-06-08
2012-06-09 0.733363 0.924076 0.393353 2012-06-09
2012-06-10 0.273837 0.318013 0.754807 2012-06-10
이 조금 잔인한 것 같다. 또 다른 옵션은 열로 날짜를 추가 한 후 정수 또는 무언가에 인덱스를 변경하는 것입니다 :
>>> dfrm.reset_index()
또는 당신은 이미 수동 컬럼에 인덱스, 단지
>>> dfrm.index = range(len(dfrm))
>>> dfrm
A B C Date
0 0.283724 0.863012 0.798891 2012-06-01
1 0.097231 0.277564 0.872306 2012-06-02
2 0.821461 0.499485 0.126441 2012-06-03
3 0.887782 0.389486 0.374118 2012-06-04
4 0.248065 0.032287 0.850939 2012-06-05
5 0.101917 0.121171 0.577643 2012-06-06
6 0.225278 0.161301 0.708996 2012-06-07
7 0.906042 0.828814 0.247564 2012-06-08
8 0.733363 0.924076 0.393353 2012-06-09
9 0.273837 0.318013 0.754807 2012-06-10
또는를 이동 한 경우 당신이 순서에 대해 신경 경우 다음 열이 나타납니다
>>> dfrm.ix[:,[-1]+range(len(dfrm.columns)-1)]
Date A B C
0 2012-06-01 0.283724 0.863012 0.798891
1 2012-06-02 0.097231 0.277564 0.872306
2 2012-06-03 0.821461 0.499485 0.126441
3 2012-06-04 0.887782 0.389486 0.374118
4 2012-06-05 0.248065 0.032287 0.850939
5 2012-06-06 0.101917 0.121171 0.577643
6 2012-06-07 0.225278 0.161301 0.708996
7 2012-06-08 0.906042 0.828814 0.247564
8 2012-06-09 0.733363 0.924076 0.393353
9 2012-06-10 0.273837 0.318013 0.754807
추가
다음은 iPython 구성 스크립트 (시작시로드되도록)에 포함 시키거나 Python으로 작업 할 때 쉽게로드 할 수있는 모듈에 저장하는 데 유용한 몇 가지 기능입니다.
###########
# Imports #
###########
import pandas
import datetime
import numpy as np
from dateutil import relativedelta
from pandas.io import data as pdata
############################################
# Functions to retrieve Yahoo finance data #
############################################
# Utility to get generic stock symbol data from Yahoo finance.
# Starts two days prior to present (or most recent business day)
# and goes back a specified number of days.
def getStockSymbolData(sym_list, end_date=datetime.date.today()+relativedelta.relativedelta(days=-1), num_dates = 30):
dReader = pdata.DataReader
start_date = end_date + relativedelta.relativedelta(days=-num_dates)
return dict((sym, dReader(sym, "yahoo", start=start_date, end=end_date)) for sym in sym_list)
###
# Utility function to get some AAPL data when needed
# for testing.
def getAAPL(end_date=datetime.date.today()+relativedelta.relativedelta(days=-1), num_dates = 30):
dReader = pdata.DataReader
return getStockSymbolData(['AAPL'], end_date=end_date, num_dates=num_dates)
###
은 또한 아래의 클래스는 보통주에 대한 몇 가지 데이터를 저장하기 위해 만든 :
#####
# Define a 'Stock' class that can hold simple info
# about a security, like SEDOL and CUSIP info. This
# is mainly for debugging things and quickly getting
# info for a single security.
class MyStock():
def __init__(self, ticker='None', sedol='None', country='None'):
self.ticker = ticker
self.sedol=sedol
self.country = country
###
def getData(self, end_date=datetime.date.today()+relativedelta.relativedelta(days=-1), num_dates = 30):
return pandas.DataFrame(getStockSymbolData([self.ticker], end_date=end_date, num_dates=num_dates)[self.ticker])
###
#####
# Make some default stock objects for common stocks.
AAPL = MyStock(ticker='AAPL', sedol='03783310', country='US')
SAP = MyStock(ticker='SAP', sedol='484628', country='DE')
감사합니다. 저는 루프를 사용하여 yahoo finance에서 데이터를로드하고 있습니다. df = DataFrame (data1)을 시도하면 색인 오류를 전달해야한다는 오류가 발생합니다. "ValueError : 사용하는 경우 모든 스칼라 값은 인덱스를 전달해야합니다 ". 루프는 DataReader를 사용하여 데이터를 가져 와서 data1이라는 dict에 넣습니다. – user1234440
그래, 필자는 IPython 구성 스크립트로 직접로드되는 유틸리티 함수를 작성했습니다.이 스크립트 중 다수는 판다를 통해 야후 데이터를 빠르게 가져 와서 데이터 프레임에 넣고 원시 가격 데이터에 대한 보조 통계를 계산하는 데 유용합니다 . 불행히도 그것은 작동하지만 나중에 도우미 기능을 추가 할 수 있습니다. – ely
정확히 내가하고 싶은 것이 있습니다. 그게 좋겠어. 어떻게 완료되었는지 언제 다시 확인할 수 있니?이 왼쪽에서 dealies 붉은 통지의 1 점을 추가하는 듯합니다 그래서 – user1234440