Run into "KeyError: 2L" assigning to dictionary
Run into "KeyError: 2L" assigning to dictionary
我有一个 pandas 数据框,我正在尝试将每个 acct_id_adj 数字添加到字典中,并通过注释搜索与该 ID 关联的所有 phone 数字。
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 490 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'])
然而,在第三行,我将 运行 保持在 ID = PhNum['acct_id_adj'][i] 处的错误 "KeyError: 2L"。没有找到好的文档,也无法弄清楚为什么问题会等到那时才出现。
感谢所有帮助,帮助我了解可能导致此错误的原因,或者如果我以错误的方式考虑字典。
分析:
看来您的PhoneNumberSearch.csv
文件格式不正确,如果是这样,pandas.read_csv将使用第一列作为索引,例如:
如果 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 490 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 490 MLF NaN
如您所见,没有 index
2 而是 3,这就是 ID = PhNum['acct_id_adj'][2]
会引发错误的原因。
解法:
你能做的你可以考虑index_col=False
强制pandas
到不使用第一列作为索引,参考official doc:
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 490 MLF
我有一个 pandas 数据框,我正在尝试将每个 acct_id_adj 数字添加到字典中,并通过注释搜索与该 ID 关联的所有 phone 数字。
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 490 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'])
然而,在第三行,我将 运行 保持在 ID = PhNum['acct_id_adj'][i] 处的错误 "KeyError: 2L"。没有找到好的文档,也无法弄清楚为什么问题会等到那时才出现。
感谢所有帮助,帮助我了解可能导致此错误的原因,或者如果我以错误的方式考虑字典。
分析:
看来您的PhoneNumberSearch.csv
文件格式不正确,如果是这样,pandas.read_csv将使用第一列作为索引,例如:
如果 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 490 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 490 MLF NaN
如您所见,没有 index
2 而是 3,这就是 ID = PhNum['acct_id_adj'][2]
会引发错误的原因。
解法:
你能做的你可以考虑index_col=False
强制pandas
到不使用第一列作为索引,参考official doc:
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 490 MLF