2017-11-16 22 views
2

나는 왜 나는이 오류를 이해하려고 노력하고있어. 나는 이미이 문제에 대한 해결책을 가지고 있으며 실제로는 here을 해결했습니다. 왜 내가 기대했던 것처럼 작동하지 않는지 이해할 필요가 있습니다.pandas DateTimeIndex - KeyError에서 행 목록을 선택하는 DataFrame입니다. 이유를 이해

나는 이것이 KeyError를 발생 이유를 이해하고자하는 다음 피드백

dates = pd.date_range('20130101', periods=4) 
df = pd.DataFrame(np.identity(4), index=dates, columns=list('ABCD')) 
df.loc[['20130102', '20130103'],:] 

:이 솔루션은 할 단지

KeyError: "None of [['20130102', '20130103']] are in the [index]" 

바와 같이 here 설명입니다 :

df.loc[pd.to_datetime(['20130102','20130104']),:] 

그래서 문제는 loc이 문자열 목록을 arg로 취하는 방식과 분명합니다. DateTimeIndex에서 선택하기위한 쉼표. 그러나, 나는 다음과 같은 호출이 기능에 대한 확인 것을 볼 수 있습니다

df.loc['20130102':'20130104',:] 

df.loc['20130102'] 
나는이 작동 방식을 이해하고 싶습니다 그리고 내가 행동을 예측하는 데 사용할 수있는 모든 자원을 부탁드립니다

호출되는 방법에 따라이 함수를 호출합니다. 나는 Indexing and Selecting DataTime Series/Date functionality을 pandas 문서에서 읽었지만 이에 대한 설명을 찾을 수 없습니다.

답변

1

일반적으로 객체와 같은 배열을 loc에 전달하면 팬더는 해당 배열의 각 요소를 색인에 배치하려고 시도합니다. 찾지 못하면 KeyError이 표시됩니다. 과! 인덱스의 값이 Timestamp s 일 때 문자열 배열을 전달 했으므로 해당 문자열은 인덱스에 없습니다.

그러나 팬더는 또한 더 쉽게 작업을 수행하려고 시도합니다. 특히, DatetimeIndex, 당신은라면

스칼라 문자열을 전달하는
df.loc['20130102'] 

A 0.0 
B 1.0 
C 0.0 
D 0.0 
Name: 2013-01-02 00:00:00, dtype: float64 

팬더가 Timestamp으로 그 스칼라을 분석하고 그 값이 인덱스에 있는지 확인하려고합니다.

당신이 slice 오브젝트를 통과한다면

df.loc['20130102':'20130104'] 

       A B C D 
2013-01-02 0.0 1.0 0.0 0.0 
2013-01-03 0.0 0.0 1.0 0.0 
2013-01-04 0.0 0.0 0.0 1.0 

팬더는 Timestamp로 슬라이스 객체의 비트를 분석하고 적절하게 썰어 dataframe를 반환하려고 시도합니다.

귀하의 KeyError은 판다 스 데브가 코딩하는 데 얼마나 많은 도움이되는지의 한계를 넘어 섰습니다.