데이터 프레임에있는 계층 적 인덱스에서 얻는이 이상한 동작을 파악할 수 없습니다. 요컨대, 내가하려는 것은 매우 간단합니다. 튜플이 내 데이터 프레임의 인덱스에 있는지 여부를 파악하려고합니다.계층 적 인덱스 문제 설정 동작 설정
WeirdIdx = pd.MultiIndex(levels=[[dt.date(2014,7,4), dt.date(2014,7,5),dt.date(2014,7,6), dt.date(2014,7,7), dt.date(2014,7,8),dt.date(2014,7,9)], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23]],labels=[[0, 0, 0, 0, 0], [8, 8, 8, 8, 8]],names=[u'day', u'hour'])
frame = pd.DataFrame({'a':np.random.normal(0,1,5)},index=WeirdIdx)
print type(frame)
print frame.index
print frame
수율 :
여기True
False
False
내가 이에 직면 오전 무엇 :
arrays = [[dt.date(2014,6,4), dt.date(2014,6,4), dt.date(2014,6,21), dt.date(2014,6,21),dt.date(2014,6,13), dt.date(2014,6,13), dt.date(2014,6,7), dt.date(2014,6,7)],['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']]
tuples = list(zip(*arrays))
index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])
s = pd.Series(randn(8), index=index)
print (dt.date(2014,6,4),'one') in s.index
print (dt.date(2014,6,4),'fifty') in s.index
print (dt.date(2014,1,1),'one') in s.index
반환
이
내가을 기대 동작입니다<class 'pandas.core.frame.DataFrame'>
day hour
2014-07-04 8
8
8
8
8
a
day hour
2014-07-04 8 0.335840
8 0.801193
8 -0.092492
8 0.610675
8 -0.044947
하고 :
print (dt.date(2014,7,4),8) in frame.index
print (dt.date(2014,7,4),1) in frame.index
print (dt.date(2014,8,4),1) in frame.index
수율 : 마지막
True
True
True
하고 :
frame.index
수율 :
MultiIndex(levels=[[2014-07-04, 2014-07-05, 2014-07-06, 2014-07-07, 2014-07-08, 2014-07-09], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23]],
labels=[[0, 0, 0, 0, 0], [8, 8, 8, 8, 8]],
names=[u'day', u'hour'])
,174, 하나의 문제는 (dt.date(2014,8,4),1) in frame.index
입니다.은 False
입니다!
무엇이 여기에 있습니까?
작동하는 경우에 대한 예제를 제공했지만 그렇지 않은 경우는 제공하지 않았습니다. 보고있는 원치 않는 동작을 보여주는 샘플 DataFrame/Series를 제공 할 수 있습니까? – BrenBarn
여기 뒤는 내가 직면 한 부분이다. 'print (dt.date (2014,1,4), 8)를 tmp에 넣는다.index'는'True '가되어서는 안됩니다 – tipanverella
''datetime.date''는'작동 '을 사용하지만 판다의 힘을 이용하지는 않습니다. "datetime.datetime"을 사용하십시오. (또는 더 나은 방법으로, 날짜를 만드는데''date_range''를 사용하십시오.) – Jeff