Не удается прочитать данные временных рядов в массив numpy

Я пытался создать набор данных временных рядов из файла .csv.

Чего я не могу обойти, так это того, что у него есть 2 индекса времени: соответственно дата транзакции и время, хранящиеся в двух отдельных строках.

При попытке это:

Date, Time, Open,High,Low,Close,Volume = np.loadtxt('EURUSD.txt', unpack = True,
                                delimiter = '\t',
                                converters = {0:time.strptime('%Y.%m.%d')})

Я получаю эту ошибку:

ValueError: invalid literal for float(): 00:00

что заставляет меня подозревать, что проблема заключается во втором индексе времени.

Данные выглядят так:

2009.03.10  00:00   1.26185 1.26265 1.26185 1.2623  1344
2009.03.10  00:05   1.2623  1.26255 1.26185 1.26195 1656
2009.03.10  00:10   1.262   1.2622  1.26155 1.26175 1068

Где первый и второй столбец — дата и время транзакции соответственно. Они разделены таб.

Должен ли я попытаться объединить два в один индекс? Если да, то как? Надеюсь, я достаточно объяснил свою проблему, я совершенно новичок в python, и я пытался исправить это уже несколько дней. Если у вас есть какие-либо вопросы, пожалуйста, не стесняйтесь спрашивать, и я отредактирую пост.

Вам также нужен преобразователь из столбца 1. Вы можете объединить массивы Date и Time после загрузки.

hpaulj 13.06.2019 21:27
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
558
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Комментарии просты, полные ответы - это то, что вы ищете здесь @Trebled.

В любом случае, как упомянул @hpaulj, необходим преобразователь для правильного анализа столбцов даты и времени ваших данных. Я обычно делаю такие операции ввода/вывода, используя функцию read_csv панд. Но перед этим я рекомендую добавить заголовок вверху вашего файла данных (исходя из вашего вопроса).

Date    Time    Open    High    Low Close   Volume
2009.03.10  00:00   1.26185 1.26265 1.26185 1.2623  1344
2009.03.10  00:05   1.2623  1.26255 1.26185 1.26195 1656
2009.03.10  00:10   1.262   1.2622  1.26155 1.26175 1068

Чтение этого файла так же просто, как вызов:

from datetime import datetime # for parsing the Date and Time columns
import pandas as pd # for reading the data file

converters_ = {
    "Date": lambda value: datetime.strptime(value, "%Y.%m.%d").date(),
    "Time": lambda value: datetime.strptime(value, "%H:%M").time()
}

data = pd.read_csv('{file_name_goes_here}', sep='\t', header = 0, converters=converters_, dtype = "float")

Как видите, импорт предназначен для соответствующих вызовов функций. Затем определяется словарь, содержащий преобразователи для столбцов даты и времени данных. В данном случае преобразователями являются лямбда-функции, которые получают i-е значение указанного столбца и преобразуют его в соответствующий объект datetime через стрптайм. Эта функция получает значение и конкретный формат в качестве аргументов. Наконец, данные считываются из файла с помощью функции read_csv с необходимыми аргументами: разделителем (табуляциями), заголовком (первая строка содержит ключи для каждого столбца), преобразователями и типом dtype (устанавливается на float, чтобы преобразовать все остальные значения столбца в числа с плавающей запятой).

Вызов данные выведет:

>>> data
         Date      Time     Open     High      Low    Close  Volume
0  2009-03-10  00:00:00  1.26185  1.26265  1.26185  1.26230    1344
1  2009-03-10  00:05:00  1.26230  1.26255  1.26185  1.26195    1656
2  2009-03-10  00:10:00  1.26200  1.26220  1.26155  1.26175    1068

Если вам нужно получить значения определенного столбца, сделайте вызов данные ['{ключ}']. Например, вызов данные['Объем'] выведет:

>>> data['Volume']
0    1344
1    1656
2    1068
Name: Volume, dtype: int64

Если вам даже нужны данные в виде массива numpy, сделайте вызов данные['{ключ}'].значения. Например, вызов данные['Объем'] выведет:

>>> data['Volume'].values
array([1344, 1656, 1068])

Наконец, если вы хотите прочитать столбцы даты и времени как один столбец:

from datetime import datetime # for parsing the Date and Time columns
import pandas as pd # for reading the data file

data = pd.read_csv('data.example', sep='\t', header = 0, parse_dates=[["Date", "Time"]], dtype = float)

В этом случае преобразователи не нужны, поскольку столбцы, которые должны быть проанализированы, указываются в списке для аргумента parse_dates. Вызов данные выведет:

>>> data
            Date_Time     Open     High      Low    Close  Volume
0 2009-03-10 00:00:00  1.26185  1.26265  1.26185  1.26230    1344
1 2009-03-10 00:05:00  1.26230  1.26255  1.26185  1.26195    1656
2 2009-03-10 00:10:00  1.26200  1.26220  1.26155  1.26175    1068

Надеюсь, это ответит на ваш вопрос. Не стесняйтесь задавать мне любые вопросы. Удачи!

Другие вопросы по теме