Я также копирую этот алгоритм, и у меня была та же ошибка, пока я не понял, что это проблема с тем, как я загружал данные. Выберите GMT ​​при загрузке с Dukasopy вместо локального, тогда вы можете использовать его оригинальный код

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

Но после того, как я выполню

df.date=pd.to_datetime(df.date,format='%d.%m.%Y %H:%M:%S.%f')

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

df = pd.read_csv("F:\Python\Jupyter notes\AUDCAD1h.csv")
df.columns = [['date', 'open','high','low','close','volume']]

df.head()
Out[66]: 
                               date     open     high      low    close volume
0  01.01.2015 00:00:00.000 GMT-0500  0.94821  0.94821  0.94821  0.94821    0.0
1  01.01.2015 01:00:00.000 GMT-0500  0.94821  0.94821  0.94821  0.94821    0.0
2  01.01.2015 02:00:00.000 GMT-0500  0.94821  0.94821  0.94821  0.94821    0.0
3  01.01.2015 03:00:00.000 GMT-0500  0.94821  0.94821  0.94821  0.94821    0.0
4  01.01.2015 04:00:00.000 GMT-0500  0.94821  0.94821  0.94821  0.94821    0.0

df.Date=pd.to_datetime(df.date,format='%d.%m.%Y %H:%M:%S.%f')
Traceback (most recent call last):

  File "<ipython-input-67-29b50fd32986>", line 1, in <module>
    df.Date=pd.to_datetime(df.date,format='%d.%m.%Y %H:%M:%S.%f')

  File "C:\Users\AM\Anaconda3\lib\site-packages\pandas\core\tools\datetimes.py", line 376, in to_datetime
    result = _assemble_from_unit_mappings(arg, errors=errors)

  File "C:\Users\AM\Anaconda3\lib\site-packages\pandas\core\tools\datetimes.py", line 446, in _assemble_from_unit_mappings
    unit = {k: f(k) for k in arg.keys()}

  File "C:\Users\AM\Anaconda3\lib\site-packages\pandas\core\tools\datetimes.py", line 446, in <dictcomp>
    unit = {k: f(k) for k in arg.keys()}

  File "C:\Users\AM\Anaconda3\lib\site-packages\pandas\core\tools\datetimes.py", line 441, in f
    if value.lower() in _unit_map:

AttributeError: 'tuple' object has no attribute 'lower'

Почему я получил ошибку, но тот, за которым я следовал, не получил? Я точно скопировал код. Что с этим не так? Благодарю.

 SamuelNLP07 дек. 2017 г., 18:11
см мой обновленный ответ.
 yomoko07 дек. 2017 г., 17:25
После того, как я укажу дату в качестве столбца индекса. Порядок дат все перепутано.
 SamuelNLP07 дек. 2017 г., 17:14
почему бы не использовать параметр для европейских дат?pd.to_datetime(df['date'], dayfirst=True)
 yomoko07 дек. 2017 г., 17:55
DatetimeIndex (['2015-01-01 12:00:00', '2015-01-01 13:00:00', '2015-01-01 14:00:00', '2015-01-01 15: 00:00 ',' 2015-01-01 16:00:00 ',' 2015-01-01 17:00:00 ',' 2015-01-01 18:00:00 ',' 2015-01-31 19:00:00 ',' 2015-01-31 20:00:00 ',' 2015-01-31 21:00:00 ', ...' 2017-01-12 11:00:00 '] As Вы видите, дата перепрыгивает с 2015-01-01 18:00 на 2015-01-31 19:00. Но есть 2015-01-01 19:00 в наборе данных в европейском формате
 SamuelNLP07 дек. 2017 г., 17:28
Можете ли вы опубликовать распечатку того, что вы подразумеваете под испорченным?

Ответы на вопрос(2)

и у меня была та же ошибка, пока я не понял, что это проблема с тем, как я загружал данные. Выберите GMT ​​при загрузке с Dukasopy вместо локального, тогда вы можете использовать его оригинальный код

Решение Вопроса

Кроме того, почему бы не позволить пандам работать на вас? Пример,

РЕДАКТИРОВАТЬ: так как вы не хотите, чтобы часть GMT была принята во внимание, я удалил ее с пониманием списка

import pandas as pd

df = pd.read_csv("date_t.csv")

print(df)
df.columns = ['date', 'open','high','low','close','volume']

df['date'] = pd.to_datetime([x[:-9] for x in df['date'].squeeze().tolist()], dayfirst=True)

df.set_index('date', inplace=True)

print(df)

РЕДАКТИРОВАТЬ 2: объяснение строки[x[:-9] for x in df['date'].squeeze().tolist()]

df['date'].squeeze() -> сжать столбец данных в серии

df['date'].squeeze().tolist() -> включить в список

[x[:-9] for x in df['date'].squeeze().tolist()] -> для каждой даты в списке сохраняются только элементы до 9-го числа, начиная с конца, что означает удаление части GMT

Из ваших данных подмножества, это то, что я получаю. Панды достаточно умен, чтобы понять GMT-0500 и конвертировать даты с учетом этого.

                              1        2        3        4        5      6
0  01.01.2015 00:00:00.000 GMT-0500  0.94821  0.94821  0.94821  0.94821  0
1  01.01.2015 01:00:00.000 GMT-0500  0.94821  0.94821  0.94821  0.94821  0
2  01.01.2015 02:00:00.000 GMT-0500  0.94821  0.94821  0.94821  0.94821  0
3  01.01.2015 03:00:00.000 GMT-0500  0.94821  0.94821  0.94821  0.94821  0
4  01.01.2015 04:00:00.000 GMT-0500  0.94821  0.94821  0.94821  0.94821  0
                        open     high      low    close  volume
date                                                           
2015-01-01 00:00:00  0.94821  0.94821  0.94821  0.94821     0.0
2015-01-01 01:00:00  0.94821  0.94821  0.94821  0.94821     0.0
2015-01-01 02:00:00  0.94821  0.94821  0.94821  0.94821     0.0
2015-01-01 03:00:00  0.94821  0.94821  0.94821  0.94821     0.0
2015-01-01 04:00:00  0.94821  0.94821  0.94821  0.94821     0.0
 yomoko07 дек. 2017 г., 17:45
Моя версия панды 0,21
 SamuelNLP07 дек. 2017 г., 17:38
Используйте код, который я предоставил выше, чтобы получить правильные даты
 SamuelNLP07 дек. 2017 г., 17:43
какая у тебя версия для панд?
 SamuelNLP07 дек. 2017 г., 17:55
Извините, я заметил двойные квадратные скобки, это только один, чтобы быть правильным. В названии столбца.
 yomoko07 дек. 2017 г., 17:42
Даже если я использую ваш код, я получаю AttributeError: у объекта 'tuple' нет ошибки атрибута 'lower', что является той же проблемой, что и у меня изначально.

Ваш ответ на вопрос