Pandas出現(xiàn)KeyError的問題解決及分析
寫在前面
今天在用爬蟲及Pandas更新股票日線數(shù)據(jù)的時候發(fā)現(xiàn)KeyError報錯,后面跟了一個DataFrame列索引,一開始以為是索引修改列的值導(dǎo)致的問題,修改為.loc錯誤依然出現(xiàn),后來將列值的內(nèi)容修改方法改為.apply(lambda)問題依然出現(xiàn)。就在百思不得其解時,我發(fā)現(xiàn)了問題所在。。。
報錯詳細信息
主要配置及環(huán)境
- Windows 10 64位
- Python:3.6.8
- Pandas:1.0.3
報錯內(nèi)容
Traceback (most recent call last):
File "E:\py36\lib\site-packages\pandas\core\indexes\base.py", line 2646, in get_loc
return self._engine.get_loc(key)
File "pandas\_libs\index.pyx", line 111, in pandas._libs.index.IndexEngine.get_loc
File "pandas\_libs\index.pyx", line 138, in pandas._libs.index.IndexEngine.get_loc
File "pandas\_libs\hashtable_class_helper.pxi", line 1619, in pandas._libs.hashtable.PyObjectHashTable.get_item
File "pandas\_libs\hashtable_class_helper.pxi", line 1627, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: 'turnover'During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "E:\aaaDesktop\test.py", line 34, in <module>
df['turnover'] = df['turnover'] * 100
File "E:\py36\lib\site-packages\pandas\core\frame.py", line 2800, in __getitem__
indexer = self.columns.get_loc(key)
File "E:\py36\lib\site-packages\pandas\core\indexes\base.py", line 2648, in get_loc
return self._engine.get_loc(self._maybe_cast_indexer(key))
File "pandas\_libs\index.pyx", line 111, in pandas._libs.index.IndexEngine.get_loc
File "pandas\_libs\index.pyx", line 138, in pandas._libs.index.IndexEngine.get_loc
File "pandas\_libs\hashtable_class_helper.pxi", line 1619, in pandas._libs.hashtable.PyObjectHashTable.get_item
File "pandas\_libs\hashtable_class_helper.pxi", line 1627, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: 'turnover'
[Finished in 5.4s]
問題解決
代碼主要流程:
抓取Sina財經(jīng)的日線數(shù)據(jù)接口(有需要者可以私信我了解更多),抓取交易日所有交易的股票數(shù)據(jù),進行數(shù)據(jù)處理、整合為DataFrame并逐行讀取存入CSV文件。
既然不是索引的問題,那就只有一直往上追溯,結(jié)果發(fā)現(xiàn),在 設(shè)置抓取函數(shù)的循環(huán)跳出條件 時,由于各大網(wǎng)站最近在備案&更新,導(dǎo)致空數(shù)據(jù)頁面顯示內(nèi)容變成了一個字符串類型的空列表。。。于是只要將循環(huán)跳出的條件設(shè)置為:
if eval(content) == []:
就可以解決問題了。
舉一反三
由于這次的經(jīng)驗,我發(fā)現(xiàn)在出現(xiàn)KeyError報錯的時候,需要先查看數(shù)據(jù)是不是存在空值,尤其是程序里面有爬蟲代碼的時候,更需要注意。網(wǎng)站經(jīng)常在變,不過基本上沒有大的變化,萬變不離其宗,掌握大的方法就可以了。
到此這篇關(guān)于Pandas出現(xiàn)KeyError的問題解決及分析的文章就介紹到這了,更多相關(guān)Pandas KeyError內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python初學(xué)者必須掌握的25個內(nèi)置函數(shù)詳解
這篇文章主要介紹了Python25個常用內(nèi)置函數(shù)總結(jié),本文羅列了數(shù)學(xué)相關(guān) 、功能相關(guān)、類型轉(zhuǎn)換、字符串處理、序列處理函數(shù)等常用內(nèi)置函數(shù),需要的朋友可以參考下2021-09-09解決python打開https出現(xiàn)certificate verify failed的問題
這篇文章主要介紹了解決python打開https出現(xiàn)certificate verify failed的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09Python中在腳本中引用其他文件函數(shù)的實現(xiàn)方法
下面小編就為大家?guī)硪黄狿ython中在腳本中引用其他文件函數(shù)的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-06-06