#python #pandas
#python #pandas
Вопрос:
Существует так много вопросов, связанных с преобразованием дат в datetimeindex. Мне лично нужен datetimeindex для работы с пакетом Calmap, для которого требуется datetimeindex. После выполнения многих руководств по stackoverflow я не смог изменить свои поля даты на datetimeindex. Вот следующие шаги, которые я предпринял.
import numpy as np
import pandas as pd
##I also attempted to add parse_dates=["Date'] and Index["Date"] to the pd.read_csv()
main_data = pd.read_csv('newoutput2.csv', delimiter=",", encoding='cp1252')
main_data = main_data.set_index(pd.to_datetime(main_data["Date"], format = "%m/%d/%y"))
import calmap
events = pd.Series(main_data.index)
calmap.yearplot(events, year=2020)
##When I run events[0] the output is
##Timestamp('2020-10-05 00:00:00')
Ошибка, которую я получаю после запуска этого кода
pythonpython38-32libsite-packagescalmap__init__.py in yearplot(data, year, how, vmin, vmax, cmap, fillcolor, linewidth, linecolor, daylabels, dayticks, monthlabels, monthticks, ax, **kwargs)
141 # Sample by day.
142 if _pandas_18:
--> 143 by_day = data.resample("D").agg(how)
144 else:
145 by_day = data.resample("D", how=how)
TypeError: Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex, but got an instance of 'RangeIndex'
Независимо от формата, которому я следую, кажется, что он никогда не создает datetimeindex из данных.
Данные здесь
Исходные данные
Name Time Date
FName LName 12:00PM 10/5/20
FName LName 12:00PM 10/5/20
FName LName 12:00PM 10/5/20
FName LName 12:00PM 10/5/20
FName LName 12:00PM 10/5/20
FName LName 12:00PM 10/5/20
FName LName 12:00PM 10/5/20
Если я напечатаю main_data, это будет выглядеть так
Name Time Date
Date
2020-10-05 FName LName 12:00:00 10/5/20
2020-10-05 FName LName 12:00:00 10/5/20
2020-10-05 FName LName 12:00:00 10/5/20
2020-10-05 FName LName 12:00:00 10/5/20
2020-10-05 FName LName 12:00:00 10/5/20
Комментарии:
1. Индекс должен быть индексом DateTime, прямо сейчас ваши значения — это время даты. Вам нужно будет правильно передать индекс:
events = pd.Series(index=main_data.index)
Ответ №1:
Попробуйте объединить дату и время перед установкой индекса. Use df.column.str.cat(colum1, sep=' ')
печать (df)
Name Time Date
0 FName LName 12:00PM 10/5/20
1 FName LName 12:00PM 10/5/20
2 FName LName 12:00PM 10/5/20
3 FName LName 12:00PM 10/5/20
4 FName LName 12:00PM 10/5/20
5 FName LName 12:00PM 10/5/20
6 FName LName 12:00PM 10/5/20
df['datetime']=pd.to_datetime(df['Date'].str.cat(df.Time, sep=' '))
df.set_index(df['datetime'], inplace=True)
print(df)
Name Time Date datetime
datetime
2020-10-05 12:00:00 FName LName 12:00PM 10/5/20 2020-10-05 12:00:00
2020-10-05 12:00:00 FName LName 12:00PM 10/5/20 2020-10-05 12:00:00
2020-10-05 12:00:00 FName LName 12:00PM 10/5/20 2020-10-05 12:00:00
2020-10-05 12:00:00 FName LName 12:00PM 10/5/20 2020-10-05 12:00:00
2020-10-05 12:00:00 FName LName 12:00PM 10/5/20 2020-10-05 12:00:00
2020-10-05 12:00:00 FName LName 12:00PM 10/5/20 2020-10-05 12:00:00
2020-10-05 12:00:00 FName LName 12:00PM 10/5/20 2020-10-05 12:00:00
Комментарии:
1. Я попробовал ваше предложение, и оно по-прежнему дает тот же результат. « Имя: datetime, Длина: 7170, dtype: datetime64[ns] «