#python #pandas
Вопрос:
У меня есть csv, состоящий из 6 столбцов, первый имеет определенное форматирование даты, поэтому мне нужно преобразовать его в формат США ГГГГ-мм-дд
после прочтения содержимого CSV-файла я продолжаю изменять столбец «дата», но продолжаю получать следующую ошибку
CSV
Gmt time,Open,High,Low,Close,Volume
01.01.2021 00:00:00.000,1.22174,1.22174,1.22174,1.22174,0
01.01.2021 01:00:00.000,1.22174,1.22174,1.22174,1.22174,0
01.01.2021 02:00:00.000,1.22174,1.22174,1.22174,1.22174,0
01.01.2021 03:00:00.000,1.22174,1.22174,1.22174,1.22174,0
01.01.2021 04:00:00.000,1.22174,1.22174,1.22174,1.22174,0
питон
import pandas as pd
df = pd.read_csv('history/EURUSDhours.csv')
df.columns = [['date','open','high','low','close','volume']]
df.date= pd.to_datetime((df.date),format='%d.%m.%Y %H:%M:%S.%f')
print(df.head)
ТИПЫ DTYPES
date object
open float64
high float64
low float64
close float64
volume int64
dtype: object
ошибка
Traceback (most recent call last):
File "eurusd.py", line 5, in <module>
df.date= pd.to_datetime((df.date),format='%d.%m.%Y %H:%M:%S.%f')
File "venvlibsite-packagespandascoretoolsdatetimes.py", line 808, in to_datetime
result = _assemble_from_unit_mappings(arg, errors, tz)
File "venvlibsite-packagespandascoretoolsdatetimes.py", line 899, in _assemble_from_unit_mappings
unit = {k: f(k) for k in arg.keys()}
File "venvlibsite-packagespandascoretoolsdatetimes.py", line 899, in <dictcomp>
unit = {k: f(k) for k in arg.keys()}
File "venvlibsite-packagespandascoretoolsdatetimes.py", line 894, in f
if value.lower() in _unit_map:
AttributeError: 'tuple' object has no attribute 'lower'
Комментарии:
1.
df.columns = [['date','open','high','low','close','volume']]
создаст столбец кортежа, удалит вложенность, чтобы иметь столбец строки
Ответ №1:
Проблема была преходящей list of list of elements to df.columns
.
import pandas as pd
df = pd.read_csv('history/EURUSDhours.csv')
df.columns = ['date','open','high','low','close','volume']
df.date= pd.to_datetime(df.date,format='%d.%m.%Y %H:%M:%S.%f')
df
Выход
date open high low close volume
0 2021-01-01 00:00:00 1.22174 1.22174 1.22174 1.22174 0
1 2021-01-01 01:00:00 1.22174 1.22174 1.22174 1.22174 0
2 2021-01-01 02:00:00 1.22174 1.22174 1.22174 1.22174 0
3 2021-01-01 03:00:00 1.22174 1.22174 1.22174 1.22174 0
4 2021-01-01 04:00:00 1.22174 1.22174 1.22174 1.22174 0
Ответ №2:
Назначьте имена столбцов массиву с 1 измерением
df.columns = ['date', 'open', 'high', 'low', 'close', 'volume']
Вы также можете позволить read_csv
делать все
header
чтобы не использовать заголовок файлаnames
чтобы дать новым именам colparse_dates
чтобы указать, какой анализ col на сегодняшний деньinfer_datetime_dates
может ускорить разбор дат
df = pd.read_csv('file123.txt', header=0,
names=['date', 'open', 'high', 'low', 'close', 'volume'],
parse_dates=['date'], infer_datetime_format=True)