DataFrame 附加生成 TypeError

DataFrame append generates TypeError

我正在尝试编写一个函数来写入和读取交易详细信息to/from .h5 文件。我想有效地使用一个文件来存储一些交易明细,并在必要时导出明细。这是我的代码:

import h5py
import numpy as np
import pandas as pd

from datetime import datetime
from os import listdir
from pandas import HDFStore


def maintainLedger(mode, tick, lastBuyy = 0, lastSell = 0, quan = 0, prof = 0):
    """THIS FUNCTION WRITES AND READS TRANSACTION DETAILS.
       mode = 0 - IF FILE EXITS, READ FILE
       mode = 1 - IF FILE EXITS, APPEND TO FILE"""

    # CHECK IF LEDGER FILE EXISTS, IF NOT CREATE A LEDGER FILE FOR THE FIRST TIME
    path = r'ledger'
    suff = r'h5'
    flie = listdir(path)
    flie = [item for item in flie if item.endswith(suff)]

    if len(flie) == 0:
        HDF5Data = HDFStore('ledger/ledger.h5')

        # GENERATE NEW VALUES OF DATE/TIME
        mi = int(datetime.now().minute)
        ho = int(datetime.now().hour)
        da = int(datetime.now().day)
        we = int(datetime.now().isocalendar()[1])
        mo = int(datetime.now().month)
        ye = int(datetime.now().year)

        newwData = np.array([mode, mi, ho, da, we, mo, ye, tick, lastBuyy, lastSell, quan, prof]).reshape(1, 12)
        newwData = pd.DataFrame(newwData, columns = ['mode', 'mi', 'ho', 'da', 'we', 'mo', 'ye', 'tick', 'laBu', 'laSe', 'quan', 'prof'])
        HDF5Data.put('data', newwData, format = 'table', data_columns = True)
        HDF5Data.close()

    elif len(flie) == 1:
        if mode == 0:
            # READ PREVIOUSLY SAVED DATA AS PANDAS DATAFRAME
            readData = pd.read_hdf('ledger/ledger.h5', mode = 'r')

            # DO SOMETHING...

        elif mode == 1:
            # GENERATE NEW VALUES OF DATE/TIME
            mi = int(datetime.now().minute)
            ho = int(datetime.now().hour)
            da = int(datetime.now().day)
            we = int(datetime.now().isocalendar()[1])
            mo = int(datetime.now().month)
            ye = int(datetime.now().year)

            # GATHER NEW DATA INTO NUMPY ARRAY AND CONVERT TO PANDAS DATAFRAME
            newwData = np.array([mode, mi, ho, da, we, mo, ye, tick, lastBuyy, lastSell, quan, prof]).reshape(1, 12)
            newwData = pd.DataFrame(newwData, columns = ['mode', 'mi', 'ho', 'da', 'we', 'mo', 'ye', 'tick', 'laBu', 'laSe', 'quan', 'prof'])

            # READ PREVIOUSLY SAVED DATA AS PANDAS DATAFRAME AND APPEND NEW DATA
            readData = pd.read_hdf('ledger/ledger.h5', mode = 'a')
            readData.append('data', newwData)

            tempData = pd.read_hdf('ledger/ledger.h5', mode = 'r')
            print(tempData)

        else:
            print('Please check input data for errors!')



if __name__ == '__main__':
    maintainLedger(1, "AAPL")

当我 运行 代码时,出现以下错误:

TypeError: cannot concatenate object of type "<class 'str'>"; only pd.Series, pd.DataFrame, and pd.Panel (deprecated) objs are valid

我曾尝试寻找解决方案,但快速搜索让我找到了 this,但这并没有解决我的问题。我做错了什么吗?如有任何建议,我们将不胜感激。

import h5py
import numpy as np
import pandas as pd

from datetime import datetime
from os import listdir
from pandas import HDFStore


def maintainLedger(mode, tick = 'QUERY', lastBuyy = 0, lastSell = 0, quan = 0, prof = 0):
    """THIS FUNCTION WRITES AND READS TRANSACTION DETAILS.
       mode = 0 - IF FILE EXITS, READ FILE
       mode = 1 - IF FILE EXITS, APPEND TO FILE"""

    # CHECK IF LEDGER FILE EXISTS, IF NOT CREATE A LEDGER FILE FOR THE FIRST TIME
    path = r'ledger'
    suff = r'h5'
    flie = listdir(path)
    flie = [item for item in flie if item.endswith(suff)]

    if len(flie) == 0:
        # GENERATE NEW VALUES OF DATE/TIME
        mi = int(datetime.now().minute)
        ho = int(datetime.now().hour)
        da = int(datetime.now().day)
        we = int(datetime.now().isocalendar()[1])
        mo = int(datetime.now().month)
        ye = int(datetime.now().year)

        # GATHER NEW DATA INTO NUMPY ARRAY AND CONVERT TO PANDAS DATAFRAME
        newwData = np.array([mode, mi, ho, da, we, mo, ye, tick, lastBuyy, lastSell, quan, prof]).reshape(1, 12)
        newwData = pd.DataFrame(newwData, columns = ['mode', 'mi', 'ho', 'da', 'we', 'mo', 'ye', 'tick', 'laBu', 'laSe', 'quan', 'prof'])

        # SAVE ALL DATA INTO .H5 FORMAT
        HDF5Data = HDFStore('ledger/ledger.h5')
        HDF5Data.put('data', newwData, format = 'table', data_columns = True)
        HDF5Data.close()

    elif len(flie) == 1:
        if mode == 0:
            """THIS OPTION ENABLES CODE TO READ DATA."""

            # READ PREVIOUSLY SAVED DATA AS PANDAS DATAFRAME
            readData = pd.read_hdf('ledger/ledger.h5', mode = 'r')

            # DO SOMETHING...
            print(readData)

        elif mode == 1:
            """THIS OPTION ENABLES CODE TO APPEND DATA."""

            # GENERATE NEW VALUES OF DATE/TIME
            mi = int(datetime.now().minute)
            ho = int(datetime.now().hour)
            da = int(datetime.now().day)
            we = int(datetime.now().isocalendar()[1])
            mo = int(datetime.now().month)
            ye = int(datetime.now().year)

            # GATHER NEW DATA INTO NUMPY ARRAY AND CONVERT TO PANDAS DATAFRAME
            newwData = np.array([mode, mi, ho, da, we, mo, ye, tick, lastBuyy, lastSell, quan, prof]).reshape(1, 12)
            newwData = pd.DataFrame(newwData, columns = ['mode', 'mi', 'ho', 'da', 'we', 'mo', 'ye', 'tick', 'laBu', 'laSe', 'quan', 'prof'])

            # READ PREVIOUSLY SAVED DATA AS PANDAS DATAFRAME AND APPEND NEW DATA
            readData = pd.read_hdf('ledger/ledger.h5', mode = 'r')
            readData = readData.append(newwData)

            # SAVE ALL DATA INTO .H5 FORMAT
            HDF5Data = HDFStore('ledger/ledger.h5')
            HDF5Data.put('data', readData, format = 'table', data_columns = True)
            HDF5Data.close()

        else:
            print('Please check input data for errors!')



if __name__ == '__main__':
    maintainLedger(1, 'MSFT')