2017-05-05 4 views
0

팬더 데이터 프레임이 있는데 사전에 각 acct_id_adj 번호를 추가하고 메모를 통해 해당 ID와 연결된 모든 전화 번호를 검색하려고합니다.사전에 할당하는 "KeyError : 2L"로 실행

Example of the dataframe 
Index RowNum acct_id_adj NOTE_DT NOTE_TXT 
0  1 A20000000113301111  5/2/2017 t/5042222222 lm w/ 3rd jn 
1  2 A20000000038002222  5/4/2017  OB CallLeft Message 
3  4 A20000000107303333  5/4/2017 8211116411 FOR $18490 MLF 


import pandas 
import re 
PhNum = pandas.read_csv('C:/PhoneNumberSearch.csv') 
PhNum = PhNum[PhNum['NOTE_TXT'].notnull()] 

D = {} 
#for i in xrange(PhNum.shape[0]): 
for i in xrange(3): 
    ID = PhNum['acct_id_adj'][i] 
    Note = re.sub(r'\W+', ' ', PhNum['NOTE_TXT'][i]) 
    print(Note) 
    Numbers = [int(s) for s in Note.split() if s.isdigit()] 
    print(Numbers) 
    for j in xrange(len(Numbers)): 
     if Numbers[j] > 1000000000: 
      D[ID] = Numbers[j] 

print(D) 

Out = pandas.DataFrame(D.items(), columns=['acct_id_adj', 'Phone_Number']) 

그러나, 제 3 열에서 I 오류로 실행 보관 'KeyError를 : 2L를 "ID = PhNum ['acct_id_adj '] [I]에서. 좋은 문서를 찾지 못했고 그때까지 문제가 발생하기를 기다리는 이유를 알 수 없습니다.

이 오류의 원인이 될지 또는 사전을 잘못된 방식으로 생각하는지에 대해 모든 도움을 주시면 감사하겠습니다.

+0

전체 추적을 게시하십시오. –

+1

PhNum [ 'acct_id_adj'] [2]'를 찾고 있기 때문에 그럴 수 있습니다. 그러나 그 숫자 중 두 번째 숫자가 Index 열에 들어 있습니다. 나는 당신의 행이 0, 1, 3 번으로 번호가 매겨져 있음을 알아 차렸다. 그래서 틀린 것일 수있다. – bouteillebleu

답변

1

분석 : csv 파일이

경우 :

너무, pandas.read_csv 예를 들어, 인덱스로 첫 번째 열을 사용하는 경우 PhoneNumberSearch.csv 파일이 잘못된 것 같다

Index,RowNum,acct_id_adj,NOTE_DT,NOTE_TXT 
0,1,A20000000113301111,5/2/2017,t/5042222222 lm w/ 3rd jn, 
1,2,A20000000038002222,5/4/2017,OB CallLeft Message, 
3,4,A20000000107303333,5/4/2017,8211116411 FOR $18490 MLF, 

PhNum은 다음과 같이 될 것입니다 :

Index RowNum acct_id_adj NOTE_DT NOTE_TXT 
0 1 A20000000113301111 5/2/2017 t/5042222222 lm w/ 3rd jn NaN 
1 2 A20000000038002222 5/4/2017 OB CallLeft Message NaN 
3 4 A20000000107303333 5/4/2017 8211116411 FOR $18490 MLF NaN 

당신이 볼 수 있듯이, index 2하지만 3이 없으므로 ID = PhNum['acct_id_adj'][2]이 오류를 발생시킵니다.

솔루션 :

당신은 당신이 official doc를 참조 pandas에이 인덱스로 첫 번째 열을 사용하지 강제로 index_col=False을 고려해 볼 수 있습니다 할 수있는 일 :

PhNum = pandas.read_csv('C:/PhoneNumberSearch.csv',index_col=False) 

PhNum을 줄 것이다 올바른 너와 함께 index :

Index RowNum acct_id_adj NOTE_DT NOTE_TXT 
0 0 1 A20000000113301111 5/2/2017 t/5042222222 lm w/ 3rd jn 
1 1 2 A20000000038002222 5/4/2017 OB CallLeft Message 
2 3 4 A20000000107303333 5/4/2017 8211116411 FOR $18490 MLF 
+1

실제로 인덱스가 필요하지 않지만 이와 같은 문제 해결 목적으로 인덱스를 갖고 싶습니다. 색인을 재설정 한 다음 키 오류가 수정되었습니다. PhNum = PhNum [PhNum [ 'NOTE_TXT']. notnull()]. ​​reset_index() – JJFord3