熊猫-EmptyDataError:读取股票.csv文件时

时间:2020-10-23 19:56:33

标签: python pandas csv

首先让我说我已经经历并进行了尽职调查,试图根据先前在网络上提出的问题找到解决方案。

我的代码中遇到一个奇怪的错误,我真的无法解释... 到目前为止,我的代码执行以下操作:

  1. 获取股票代码并将OHLC数据写入CSV文件

  2. 循环浏览包含CSV文件的目录,然后使用该数据计算技术指标

  3. 将技术指标数据添加到同一CSV文件

    因此,错误是,它完美执行了所有内容(99种股票),除了ZM.csv(缩放)。它显示的错误是“

    pandas.errors.EmptyDataError:没有可从文件中解析的列。

因此,要进行故障排除,我将ZM.csv中的数据复制并粘贴到了我知道运行良好的CSV中(我使用了AAPL),并且实际上执行得很好。接下来,我从AAPL.csv获取工作数据,将其粘贴到ZM.csv中,然后再次运行。它抛出相同的错误。我还尝试将文件重命名为ZMI(随机),并且可以正常工作。

这使我相信,出于某些未知原因,FILENAME是根本问题。在最初创建CSV文件的部分,我将文件名分别更改为{symbol} 1.csv,{symbol} _。csv和{symbol} I.csv。最后,我将两个文件合并在一起,没有其他问题。有效。有人知道为什么吗?

流程是首先运行bars.py,检查data/ohlc/目录CSV文件(应该只包含OHLC数据),运行technical_analysis.py,然后再次检查CSV文件(现在带有技术指标)。

[bar.py]

    from config import *
    from datetime import datetime
    import requests, json

    holdings = open('data/qqq.csv').readlines()

    symbols_list = [holding.split(',')[2].strip() for holding in holdings][1:]
    symbols = ','.join(symbols_list)

    minute_bars_url = '{}/1Min?symbols={}&limit=100'.format(BARS_URL, symbols)
    r = requests.get(minute_bars_url, headers=HEADERS)

    ohlc_data = r.json()

    for symbol in ohlc_data:
        filename = 'data/ohlc/{}.csv'.format(symbol)
        f = open(filename, 'w+')
        f.write('Timestamp,Open,High,Low,Close,Volume\n')
        for bar in ohlc_data[symbol]:
            t = datetime.fromtimestamp(bar['t'])
            timestamp = t.strftime('%I:%M:%S%p-%Z%Y-%m-%d')
            line = '{},{},{},{},{},{}\n'.format(timestamp, bar['o'], bar['h'],                                                 
                                                 bar['l'], bar['c'], bar['v'])
            f.write(line)

变量symbols_list和symbol打印如下:

symbols_list = ['AAPL', 'MSFT', 'AMZN', 'FB', 'GOOGL', 'GOOG', 'TSLA', 'NVDA', 'PYPL', 'ADBE', 'INTC', 'NFLX', 'CMCSA', 'PEP', 'COST', 'CSCO', 'AVGO', 'QCOM', 'TMUS', 'AMGN', 'TXN', 'CHTR', 'SBUX', 'ZM', 'AMD', 'INTU', 'ISRG', 'MDLZ', 'JD', 'GILD', 'BKNGLD', 'BKNG', 'FISV', 'MELI', 'ATVI', 'ADP', 'CSX', 'REGN', 'MU', 'AMAT', 'ADSK', 'VRTX', 'LRCX', 'ILMN', 'ADI', 'BIIB', 'MNST', 'EXC', 'KDP', 'LULU', 'DOCU', 'WDAY', 'CTSH', 'KHC', 'NXPI', 'BIDU', 'XEL', 'DXCM', 'EBAY', 'EA', 'ID', 'SNPS',XX', 'CTAS', 'SNPS', 'ORLY', 'SGEN', 'SPLK', 'ROST', 'WBA', 'KLAC', 'NTES', 'PCAR', 'CDNS', 'MAR', 'VRSK', 'PAYX', 'ASML', 'ANSS', 'MCHP', 'XLNX', 'MRNA', 'CPRT', 'ALGN', 'PDD', 'ALXN', 'SIRI', 'FAST', 'SWKS', 'VRSN', 'DLTR', 'CE 'TTWO', 'RN', 'MXIM', 'INCY', 'TTWO', 'CDW', 'CHKP', 'CTXS', 'TCOM', 'BMRN', 'ULTA', 'EXPE', 'FOXA', 'LBTYK', 'FOX', 'LBTYA']
symbols = AAPL,MSFT,AMZN,FB,GOOGL,GOOG,TSLA,NVDA,PYPL,ADBE,INTC,NFLX,CMCSA,PEP,COST,CSCO,AVGO,QCOM,TMUS,AMGN,TXN,CHTR,SBUX,ZM,AMD,INTU,ISRG,MDLZ,JD,GILD,BKNG,FISV,MELI,ATVI,ADP,CSX,REGN,MU,AMAT,ADSK,VRTX,LRCX,ILMN,ADI,BIIB,MNST,EXC,KDP,LULU,DOCU,WDAU,DOCU,WDAY,CTSH,KHC,NXPI,BIDU,XEL,DXCM,EBAY,EA,IDXX,CTAS,SNPS,ORLY,SGEN,SPLK,ROST,WBA,KLAC,NTES,PCAR,CDNS,MAR,VRSK,PAYX,ASML,ANSS,MCHP,XLNX,MRNA,CPRT,ALGN,PDD,ALXN,SIRI,FAST,SWKS,VRSN,DLTR,CERN,MXIM,INCY,TTWO,CDW,CHKP,CTXS,TCOM,EXPE,FOXA,BMRN,ULTA,EXPE,FOXA,LBTYK,FOX,LBTYA

因此ZM不在最后列出。

[technical_analysis.py]

    import btalib
    import pandas as pd
    from datetime import datetime
    from bars import ohlc_data
    from bars import symbols_list as symbols

    for symbol in symbols:
        try:
            file_path = f'data/ohlc/{symbol}.csv'
            dataframe = pd.read_csv(file_path,
                                parse_dates=True,
                                index_col='Timestamp')

            sma6 = btalib.sma(dataframe, period=6)
            sma10 = btalib.sma(dataframe, period=10)
            rsi = btalib.rsi(dataframe)
            macd = btalib.macd(dataframe)

            dataframe['SMA-6'] = sma6.df
            dataframe['SMA-10'] = sma10.df
            dataframe['RSI'] = rsi.df
            dataframe['MACD'] = macd.df['macd']
            dataframe['Signal'] = macd.df['signal']
            dataframe['Histogram'] = macd.df['histogram']

            f = open(file_path, 'w+')
            dataframe.to_csv(file_path, sep=',', index=True)
        except:
            print(f'{symbol} is not writing the technical data.')

2 个答案:

答案 0 :(得分:0)

您可能可以进一步减少代码以获取最小可行的示例。我怀疑qqq.csv文件中的某些内容和拆分/剥离代码使最后一个条目不符合您的要求。

希望可以按如下所示清晰地打印出变量值。

data/qqq.csv类似

xname,yname,symbol
xxx,yyy,ZM

和py示例

def write_OHLC(fname):
    "write example data to a file"
    f = open(fname, 'w+')
    f.write('Timestamp,Open,High,Low,Close,Volume\n')
    # IRL, would parse json and spitout meaningful values
    f.write('2020-10-13 16:30,1,10,5,100\n')


def all_symbols():
    "get list of all symbols from qqq.csv"
    holdings = open('data/qqq.csv').readlines()
    symbols_list = [holding.split(',')[2].strip() for holding in holdings][1:]
    return symbols_list

# issue saving/reading last(?) symbol
symbols = all_symbols()
print(symbols)
# check just zoom
zm_sym = symbols[-1]
fname = f'data/ohlc/{zm_sym}.csv'
# inspect
print(zm_sym)
print(fname)
# write and read back
write_OHLC(fname)
ZM = pd.read_csv(fname,
                 parse_dates=True,
                 index_col='Timestamp')
print(ZM)

答案 1 :(得分:0)

我认为错误可能是因为'ZM'是holdings中的最后一个符号,它包含一些空格,这是由于在[bar.py]中您以以下方式创建了holdings(而不是只是普通的pd.read_csv):

holdings = open('data/qqq.csv').readlines()

symbols_list = [holding.split(',')[2].strip() for holding in holdings][1:]
symbols = ','.join(symbols_list)