Различные ошибки чтения одного и того же CSV из скрипта или консоли в Spyder - PullRequest
0 голосов
/ 06 мая 2019

Стремится импортировать и объединять многочисленные CSV в один фрейм данных. В зависимости от того, работает ли он как функция или строка кода непосредственно из консоли, возможны разные ошибки.

Из консоли это: «Ошибка: строка содержит NULL байт» Из функции: "TypeError: Ожидаемый объект типа bytes или bytearray, полученный:"

В зависимости от количества пропусков он будет импортировать данные со строкой NaN между каждой строкой, содержащей данные.

Я попытался определить кодировку и различные разделители. Кодировка по умолчанию возвращается как ascii методом chardet.detect. Также попытались сохранить вручную как UTF 8, который, кажется, хорошо возвращает файл, если запускается из консоли.


    filename = askopenfilenames()
    tkinter.Tk().withdraw()

    counter = 0
    Ol_DF=[]

    if type(filename)=='string':
        filename=filename + ','


    for fnm in filename: # Find length of filename and iterate
        with open(fnm,'rb') as f: # open each file and declare as tempvar f
            result = chardet.detect(f.readline(100))# determine csv encoding
        rfindPos=fnm.rfind("/"), fnm.rfind('.csv') # find positions for string slicing
        keyStr=fnm[rfindPos[0]+1:rfindPos[1]] # slice string


        tmpData = pd.read_csv(fnm,skiprows = 7, error_bad_lines=False, skipfooter=3, warn_bad_lines=False,encoding=result['encoding'],engine='python',infer_datetime_format=True)
            # Save to pandas dataframe



        """
        Initial clean data in dataframe and add headings and keyStr as key
        """

        tmpData.dropna(inplace=True) #remove NA's applies to row        
        HIndx=list(tmpData['Unnamed: 0']).index('Date')
        tmpData.drop(tmpData.iloc[HIndx]) # drop headedex('Date') #index of header row        
        tmpData.rename(columns=tmpData.iloc[HIndx],inplace=True) #replace header        
        tmpData.key= keyStr

        counter = counter +1        

        if counter > 1:
            Ol_DF=Ol_DF.append(tmpData)


Надеясь объединить и отсортировать множество CSV, которые являются выходами одного и того же типа инструмента.

Рад отправить файл примера, если это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...