串KeyError異常0 LOC選擇朋友送我這個僞代碼,爲了做一個簡單的暗號:與大熊貓
chaine1="abcdefghijklmnopqrstuvwxyz"
chaine2="abcdefghijklmnopqrstuvwxyz"
list1=list(chaine1)
list2=list(chaine2)
rnd.shuffle(list2)
code=pd.DataFrame({"Key": list1, "Value" : list2})
他設法恢復像這樣的信:
a = code.loc[code['Key'] == 'a', 'Value']
於是,他試圖遍歷字來對其進行編碼:
word1="helloworld"
for char in word1:
h=code.loc[code['Key'] == char, 'Value'][0]
語法是相同的,但它失敗:
KeyError Traceback (most recent call last)
<ipython-input-88-4e2a59e0978e> in <module>()
1 word1="helloworld"
2 for char in word1:
----> 3 h=code.loc[code['Key'] == char, 'Value'][0]
~/Envs/test_bapt/lib/python3.5/site-packages/pandas/core/series.py in __getitem__(self, key)
599 key = com._apply_if_callable(key, self)
600 try:
--> 601 result = self.index.get_value(self, key)
602
603 if not is_scalar(result):
~/Envs/test_bapt/lib/python3.5/site-packages/pandas/core/indexes/base.py in get_value(self, series, key)
2475 try:
2476 return self._engine.get_value(s, k,
-> 2477 tz=getattr(series.dtype, 'tz', None))
2478 except KeyError as e1:
2479 if len(self) > 0 and self.inferred_type in ['integer', 'boolean']:
pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_value (pandas/_libs/index.c:4404)()
pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_value (pandas/_libs/index.c:4087)()
pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc (pandas/_libs/index.c:5126)()
pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.Int64HashTable.get_item (pandas/_libs/hashtable.c:14031)()
pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.Int64HashTable.get_item (pandas/_libs/hashtable.c:13975)()
KeyError: 0
我想通了.values
失蹤:h=code.loc[code['Key'] == char, 'Value'][0]
。 但有人知道爲什麼第一行工作?我認爲遍歷一個字符串仍然會返回一個字符串。也許我錯過了一些東西,它來自熊貓。我正在運行的版本'0.20.3'
編輯:當我貼我的a
定義忘記[0]
它應該是:
a = code.loc[code['Key'] == 'a', 'Value'][0]
對不起徹底難倒我的帖子的點。我想明白爲什麼它在這個簡單的情況下工作,而不是在迭代過程中。
您的問題已得到解答,但請注意,在這種特殊情況下使用'pandas.Dataframe'是無用的。一個'dict'可能是最好的方法(在zip(list1,list2)}中用'code = {k:v代替(k,v)}')。 – FabienP
我完全同意,我會用'dict'代替。但我想明白爲什麼這個簡單的例子失敗了,請看我的帖子底部的**編輯**。對不起,一塌糊塗。 – MCMZL