Не могу прочитать данные временного ряда в массив - PullRequest
0 голосов
/ 13 июня 2019

Я пытался создать набор данных временных рядов из файла .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 Ответ

0 голосов
/ 18 июня 2019

Комментарии просты, полные ответы - это то, что вы ищете здесь.нужно ваших данных.Я обычно делаю такие операции ввода / вывода, используя функцию pandas 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-ое значение указанного столбца и преобразуют его в соответствующий объект даты-времени через strptime .Эта функция получает значение и конкретный формат в качестве аргументов.Наконец, данные считываются из файла с использованием функции read_csv с разделителем необходимых аргументов (вкладки), заголовком (первая строка содержит ключи для каждого столбца), конвертерами и типом d (устанавливается на float для преобразования всех остальных значений столбца вчисла с плавающей запятой).

Вызов data выведет:

>>> 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'] приведет к выводу:

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

Если вам даже нужны данные в виде массива, сделайте вызов data ['{key} ']. values ​​ Например, вызов data [' Volume '] приведет к выводу:

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

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

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 выдаст:

>>> 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

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

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