pandas загрузить CSV-файл ValueError - PullRequest
1 голос
/ 28 мая 2020

Цель этого скрипта - прочитать файл csv и создать фрейм данных pandas, а затем распечатать первые 5 r aws в стиле OOP.

Вот код:

import pandas as pd
import talib


class Data:
    def __init__(self):
        self.df = pd.DataFrame()
        self.names = ['Date', 'Time', 'Open', 'High', 'Low', 'Close', 'Volume']
        self.file(self)

    def file(self, file):
        df = pd.read_csv(file, names=self.names,
                         parse_dates={'Release Date': ['Date', 'Time']})
        print(df.head())


x = Data()
x.file(file=r"D:\Projects\Project Forex\EURUSD.csv")

Вот ошибка:

Traceback (most recent call last):

  File "C:/Users/Sayed/PycharmProjects/project/Technical Analysis.py", line 15, in <module>
    x = Data()

  File "C:/Users/Sayed/PycharmProjects/project/Technical Analysis.py", line 9, in __init__
    self.file(self)

  File "C:/Users/Sayed/PycharmProjects/project/Technical Analysis.py", line 13, in file
    parse_dates={'Release Date': ['Date', 'Time']})

  File "C:\Users\Sayed\miniconda3\lib\site-packages\pandas\io\parsers.py", line 676, in parser_f
    return _read(filepath_or_buffer, kwds)

  File "C:\Users\Sayed\miniconda3\lib\site-packages\pandas\io\parsers.py", line 431, in _read
    filepath_or_buffer, encoding, compression

  File "C:\Users\Sayed\miniconda3\lib\site-packages\pandas\io\common.py", line 200, in get_filepath_or_buffer

    raise ValueError(msg)
ValueError: Invalid file path or buffer object type: <class '__main__.Data'>

1 Ответ

2 голосов
/ 28 мая 2020

Виновником является последняя строка __init__: self.file(self). Когда он вызывается в __init__, self является объектом Data, тогда как метод file должен вызываться со строкой, содержащей путь к файлу csv.

Исправление тривиально : удалить эту строку:

class Data:
    def __init__(self):
        self.df = pd.DataFrame()
        self.names = ['Date', 'Time', 'Open', 'High', 'Low', 'Close', 'Volume']

    def file(self, file):
        ...

, но она все еще не согласована: self.df инициализируется как пустой фрейм данных, и это нормально, но метод file не обновляет его и вместо этого использует локальный переменная df (в отличие от self.df в Python). Вам следует сделать:

def file(self, file):
    self.df = pd.read_csv(file, names=self.names,
                     parse_dates={'Release Date': ['Date', 'Time']})
    print(self.df.head())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...