访问.csv文件时使用Pandas获取KeyError

时间:2018-11-05 16:41:10

标签: python python-3.x pandas dataframe finance

由于某些原因,熊猫在查看我拥有的某些.csv股票数据时会抛出错误。这是错误:

  

回溯(最近通话最近):    在get_loc中的文件“ /usr/local/lib/python3.7/site-packages/pandas/core/indexes/base.py”,行3078       返回self._engine.get_loc(key)     在pandas._libs.index.IndexEngine.get_loc中的文件“ pandas / _libs / index.pyx”,第140行     在pandas._libs.index.IndexEngine.get_loc中的文件“ pandas / _libs / index.pyx”,第162行     在pandas._libs.hashtable.PyObjectHashTable.get_item中的文件“ pandas / _libs / hashtable_class_helper.pxi”,行1492     在pandas._libs.hashtable.PyObjectHashTable.get_item中的文件“ pandas / _libs / hashtable_class_helper.pxi”,行1500   KeyError:“日期”

     

在处理上述异常期间,发生了另一个异常:

     

回溯(最近通话最近):     在第75行的文件“ ./python-for-finance-7.py”中       compile_data()     在compile_data中的文件“ ./python-for-finance-7.py”,第59行       df.set_index('Date',inplace = True)     set_index中的文件“ /usr/local/lib/python3.7/site-packages/pandas/core/frame.py”,行3909       级别=帧[col] ._ values     在 getitem 中的文件“ /usr/local/lib/python3.7/site-packages/pandas/core/frame.py”,第2688行       返回self._getitem_column(key)     _getitem_column中的文件“ /usr/local/lib/python3.7/site-packages/pandas/core/frame.py”,第2695行       返回self._get_item_cache(key)     _get_item_cache中的文件“ /usr/local/lib/python3.7/site-packages/pandas/core/generic.py”,行2489       值= self._data.get(项目)     在获得的文件“ /usr/local/lib/python3.7/site->packages/pandas/core/internals.py”中,行4115       loc = self.items.get_loc(item)     在get_loc>中的文件“ /usr/local/lib/python3.7/site-packages/pandas/core/indexes/base.py”,行3080返回self._engine.get_loc(self._maybe_cast_indexer(key))     在pandas._libs.index.IndexEngine.get_loc中的文件“ pandas / _libs / index.pyx”,第140行     在pandas._libs.index.IndexEngine.get_loc中的文件“ pandas / _libs / index.pyx”,第162行     在pandas._libs.hashtable.PyObjectHashTable.get_item中的文件“ pandas / _libs / hashtable_class_helper.pxi”,行1492     在pandas._libs.hashtable.PyObjectHashTable.get_item中的文件“ pandas / _libs / hashtable_class_helper.pxi”,行1500   KeyError:“日期”

此代码:

import bs4 as bs
import datetime as dt
import os 
import pandas as pd
import pandas_datareader.data as web
import pickle
import requests

def compile_data():
    with open("sp500tickers.pickle","rb") as f:
        tickers = pickle.load(f)

    main_df = pd.DataFrame()

    for count,ticker in enumerate(tickers):
        df = pd.read_csv('stock_dfs/{}.csv'.format(ticker), 
delimiter=',', encoding="utf-8-sig")

        df.set_index('Date', inplace=True)

        df.rename(columns = {'Adj Close':ticker}, inplace=True)
        df.drop(['High','Low','Open','Close','Volume'], 1, inplace=True)

        if main_df.empty:
            main_df = df
        else:
            main_df = main_df.join(df, how='outer')

        print(count)

    print(main_df.head())
    main_df.to_csv('sp500_joined_closes.csv')

compile_data()

CSV文件中的数据的排列方式如下:

Date         High   Low  Open   Close   Volume   Adj. Close

yyyy-mm-dd   $$      $$   $$      $$      $$       $$

我尝试更改Date的大小写(即,将Date更改为date),但是它只是继续抛出另一个

  

KeyError:在轴中找不到[['高','低','打开','关闭','体积']

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

您似乎使用了错误的轮廓标记。该文件用空格隔开,而不用逗号隔开。

尝试使用空白轮廓符:

df = pd.read_csv('stock_dfs/{}.csv'.format(ticker), 
delimiter=r'\s+', encoding="utf-8-sig")

答案 1 :(得分:0)

就我而言,设置索引时我没有任何条目,数据框为空。 值得检查

if len(df) > 0:

设置索引之前