2017-10-23 1 views
3

hdfs 저장소의 테이블에 추가 할 데이터 프레임을 여러 번 반복하여 처리하려고합니다. 색인은 서로 중첩됩니다. 저장소에없는 인덱스가있는 행만 추가하려고합니다.HDFS 저장소가있는 테이블에 새 인덱스 만 추가하는 방법


MCVE

내 데이터가 d1d2 프레임 고려 : 나는 다음과 같은 논리를 달성 할

d1 = pd.DataFrame.from_dict(
    {('a', 'x'): {'col': 1}, ('a', 'y'): {'col': 1}}, orient='index') 
d2 = pd.DataFrame.from_dict(
    {('b', 'x'): {'col': 2}, ('a', 'y'): {'col': 2}}, orient='index') 

print(d1, '\n\n', d2) 

    col 
a x 1 
    y 1 

     col 
a y 2 
b x 2 

:

d1.append(d2.loc[d2.index.difference(d1.index)]) 

    col 
a x 1 
    y 1 
b x 2 

그러나 나는이 원하는 hdfs 저장소에 추가. 나는 당신이 인덱스 ('a', 'y')는 두 개의 서로 다른 값으로 중복되는 것을 볼 수 있습니다

d1.to_hdf('test.h5', 'mytable', format='table') 
d2.to_hdf('test.h5', 'mytable', append=True) 

pd.read_hdf('test.h5', 'mytable') 

    col 
a x 1 
    y 1 
    y 2 
b x 2 

을 시도했다

. 테이블에 새 행을 추가하기 전에 테이블의 인덱스 값을 확인하는 방법이 있다고 가정합니다.

+0

[** @ Jeff 's answer **] (https://stackoverflow.com/a/19326312/2336654)와 Grr의 답변을 결합하면 내가 있어야 할 곳이 생겼습니다. – piRSquared

답변

1

먼저 상점을 초기화하는 것이 도움이 될 수 있습니다. 그런 다음 데이터 프레임을 mytable에 할당하고 데이터 프레임 전용 예제에서와 같이 작업 할 수 있어야합니다.

store = pd.HDFStore('test.h5') 

store['mytable'] = d1 
store['mytable'].append(d2.loc[d2.index.difference(store['mytable'].index)]) 

    col 
a x 1 
    y 1 
b x 2 
+0

이것은 내가 찾고있는 것입니다. 'store.append ('mytable', d2.loc [d2.index.difference (store [ 'mytable']. index)])'. 이 솔루션은 좋습니다. 그러나 인덱스에 도달하기 위해 저장된 전체 데이터 프레임을 메모리로 읽어야한다고 생각됩니다. 나는 이제 질문을 공개적으로 남겨두고, 전체 데이터 프레임이 아닌 색인 만 읽을 수있는 대답을 얻을 수 있는지 알아볼 것입니다. 나는 무슨 일이 벌어지고 있는지에 대한 나의 해석에 대해서 틀릴 수도있다. 추가 설명 열기 ... 안녕하세요! – piRSquared

+0

안녕하세요! 그리고 좋은 점이 있습니다. HDFS에서 단일 열에 액세스 할 수 있으리라 확신합니다. 아마 색인 만 얻은 다음 diff를 추가하고 추가 할 수 있습니까? 그래도 정말로. – Grr

+0

오. 어쩌면 이미 그랬을 것 같습니다. – Grr

관련 문제