2017-05-05 1 views
0

Ich habe eine Pandas Datenrahmen und ich versuche, jede acct_id_adj Nummer zu einem Wörterbuch hinzufügen und suchen Sie nach allen Telefonnummern mit dieser ID durch die Notizen verbunden.Run in "KeyError: 2L" Zuordnung zu Wörterbuch

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']) 

jedoch in der dritten Zeile i laufen weiter in einen Fehler "KeyError: 2L" at ID = Phnum [ 'acct_id_adj'] [i]. Keine gute Dokumentation zu finden und kann nicht herausfinden, warum das Problem warten würde, bis dann entstehen.

Alle Hilfe geschätzt in mich mich in, was diesen Fehler verursachen könnte, oder wenn ich über Wörterbücher in der falschen Weise denke.

+0

Bitte schreiben Sie den vollständigen Traceback. –

+1

Vielleicht liegt es daran, dass es nach 'PhNum ['acct_id_adj'] [2]' sucht, aber es ist die zweite dieser Zahlen, die sich in der Spalte Index befindet? Ich habe bemerkt, dass deine Reihen dort mit 0, 1 und 3 nummeriert sind, also könnte das was falsch sein. – bouteillebleu

Antwort

1

Analyse:

Es scheint, dass Ihre PhoneNumberSearch.csv Datei fehlerhaft ist, wenn ja, pandas.read_csv die erste Spalte als Index verwenden, zum Beispiel:

wenn CSV-Datei ist:

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, 

Die PhNum wird so aussehen:

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 

wie Sie sehen können, gibt es keine index 2 aber 3, deshalb ID = PhNum['acct_id_adj'][2] wird Fehler erhöhen.

Lösung:

Was können Sie tun, Sie index_col=False betrachten könnte pandas-nicht die erste Spalte als Index verwenden, um zu erzwingen, siehe official doc:

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

Die PhNum geben Sie mit der richtigen 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

Ich brauche eigentlich keinen Index, möchte sie aber trotzdem zur Fehlersuche haben. Ich habe am Ende nur den Index zurückgesetzt und dann wurde der Schlüsselfehler behoben. PhNum = PhNum [PhNum ['NOTE_TXT'] .notnull()]. ​​Reset_index() – JJFord3