Я пытался создать набор данных временных рядов из файла .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, и я пытался исправить это уже несколько дней. Если у вас есть какие-либо вопросы, пожалуйста, не стесняйтесь спрашивать, и я отредактирую пост.
Комментарии просты, полные ответы - это то, что вы ищете здесь @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
Надеюсь, это ответит на ваш вопрос. Не стесняйтесь задавать мне любые вопросы. Удачи!
Вам также нужен преобразователь из столбца 1. Вы можете объединить массивы
Date
иTime
после загрузки.