2012-07-04 2 views
2
     Open  High Low Close Volume  Adj Close 
Date       
1990-01-02 00:00:00 35.25 37.50 35.00 37.25 6555600  8.70 
1990-01-03 00:00:00 38.00 38.00 37.50 37.50 7444400  8.76 
1990-01-04 00:00:00 38.25 38.75 37.25 37.63 7928800  8.79 
1990-01-05 00:00:00 37.75 38.25 37.00 37.75 4406400  8.82 
1990-01-08 00:00:00 37.50 38.00 37.00 38.00 3643200  8.88 

위의 dataframe에서 날짜 인덱스 이름을 제거하려면 어떻게합니까? 다른 열 이름과 같은 행에 있어야하지만 문제가있는 행 이름과 같지 않아야합니다.데이터 프레임에서 열 인덱스 이름을 꺼내는 방법

감사

답변

8

짧은 답변 : 당신은 할 수 없습니다이 이제까지 "문제가 발생할"수없는 이유는 분명하지 않다. '날짜'이름은 열과 다른 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') 
+0

감사합니다. 저는 루프를 사용하여 yahoo finance에서 데이터를로드하고 있습니다. df = DataFrame (data1)을 시도하면 색인 오류를 전달해야한다는 오류가 발생합니다. "ValueError : 사용하는 경우 모든 스칼라 값은 인덱스를 전달해야합니다 ". 루프는 DataReader를 사용하여 데이터를 가져 와서 data1이라는 dict에 넣습니다. – user1234440

+0

그래, 필자는 IPython 구성 스크립트로 직접로드되는 유틸리티 함수를 작성했습니다.이 스크립트 중 다수는 판다를 통해 야후 데이터를 빠르게 가져 와서 데이터 프레임에 넣고 원시 가격 데이터에 대한 보조 통계를 계산하는 데 유용합니다 . 불행히도 그것은 작동하지만 나중에 도우미 기능을 추가 할 수 있습니다. – ely

+0

정확히 내가하고 싶은 것이 있습니다. 그게 좋겠어. 어떻게 완료되었는지 언제 다시 확인할 수 있니?이 왼쪽에서 dealies 붉은 통지의 1 점을 추가하는 듯합니다 그래서 – user1234440

10

당신은 내가 생각하기에, 원하는이다 (컬럼에 DataFrame의 인덱스를 이동 reset_index 방법을 사용해보십시오).

관련 문제