2014-06-11 3 views
3

PandasDataFrame에 두 개의 열이 있으며 인덱스는 datetime입니다. 두 개의 열에는 동일한 매개 변수를 측정하는 데이터가 있지만 어느 열도 완료되지 않았습니다 (일부 행에는 데이터가 전혀 없으며 일부 행에는 두 열에 데이터가 있고 다른 데이터에는 열 'a'또는 'b'가 있음).KeyError : 인덱스에 없습니다. 팬더 데이터 프레임에서 생성 된 키를 사용합니다.

필자는 다음과 같은 코드를 작성하여 열의 틈을 찾고 이러한 틈이 나타나는 날짜 목록의 목록을 생성 한 다음이 목록을 사용하여 누락 된 데이터를 찾고 바꿉니다. 그러나 나는 KeyError: Not in index을 3 행에 가져 왔는데, 색인에 사용하는 키가 DataFrame에서 나왔기 때문에 이해할 수 없습니다. 누군가 이것이 왜 이런 일이 일어나고 있으며 그것을 고칠 수있는 방법을 설명 할 수 있습니까? 여기 코드는 다음과 같습니다

def merge_func(df): 
    null_index = df[(df['DOC_mg/L'].isnull() == False) & (df['TOC_mg/L'].isnull() == True)].index 
    df['TOC_mg/L'][null_index] = df[null_index]['DOC_mg/L'] 
    notnull_index = df[(df['DOC_mg/L'].isnull() == True) & (df['TOC_mg/L'].isnull() == False)].index 
    df['DOC_mg/L'][notnull_index] = df[notnull_index]['TOC_mg/L'] 

    df.insert(len(df.columns), 'Mean_mg/L', 0.0) 
    df['Mean_mg/L'] = (df['DOC_mg/L'] + df['TOC_mg/L'])/2 
    return df 

merge_func(sve) 
+1

'df.loc [null_index, 'TOC_mg/L'] = df [ 'DOC_mg/L']' – EdChum

+0

예, 완벽하게 작동합니다. 감사! – Bprodz

+0

내가 답으로 게시하길 원하십니까? – EdChum

답변

3

당신이 다음 .loc를 사용해야 과제를 수행하는 고려 때마다 :

: 원래 코드에서 오류가 인덱스 조회를위한 첨자 값의 순서가
df.loc[null_index,'TOC_mg/L']=df['DOC_mg/L'] 

df['TOC_mg/L'][null_index] = df[null_index]['DOC_mg/L'] 

은 색인 데이터를 생성합니다. IndexError: indices are out-of-bounds

이에 순서를 변경 한 경우 (3210)

아마 작동합니다 :

df['TOC_mg/L'][null_index] = df['DOC_mg/L'][null_index] 

그러나,이 연결됩니다 할당을 피해야한다는 online docs

그래서 당신이 loc를 사용해야합니다 참조 :

df.loc[null_index,'TOC_mg/L']=df['DOC_mg/L'] 
df.loc[notnull_index, 'DOC_mg/L'] = df['TOC_mg/L'] 

올바르게 정렬되기 때문에 rhs에 대해 동일한 색인을 사용할 필요가 없음을 유의하십시오.