Разобрать даты для datetype как DDMMMYYYY
В настоящее время мои данные имеют дату как 01JAN2017
Как заставить панды понимать это как тип даты, мне нужно, чтобы данные были в виде даты, чтобы отфильтровать их по различным временным рамкам. я использовал ниже
data=pd.read_csv(input_path + 'data.txt',sep='|', parse_dates=['week'])
но когда я проверил тип данных на неделю, он все еще отображается как объект.
Было бы очень полезно, если бы вы могли также направить меня на некоторые другие ссылки, чтобы я мог прочитать больше об этом
2 ответа
Ты можешь использовать datetime.strptime()
разобрать строку даты в datetime
объект:
>>> from datetime import datetime
>>> datetime.strptime("01JAN2017", "%d%b%Y")
>>> datetime.datetime(2017, 1, 1, 0, 0)
Теперь, чтобы панды распознали формат, вы можете добавить функцию парсера дат:
dateparse = lambda dates: [pd.datetime.strptime(d, "%d%b%Y") for d in dates]
df = pd.read_csv(infile, parse_dates=["week"], date_parser=dateparse)
В pandas
to_datetime
метод является естественным выбором
In [11]: D = {'Date': '01JAN2017'}
In [12]: df = pd.DataFrame(D, index=[0])
In [13]: df
Out[13]:
Date
0 01JAN2017
In [14]: df.dtypes
Out[14]:
Date object
dtype: object
# Datatime column is read as string
# use to_datetime to convert non-standard datetime values
In [15]: df['Date'] = pd.to_datetime(df.Date, format='%d%b%Y')
In [16]: df.dtypes
Out[16]:
Date datetime64[ns]
dtype: object
In [17]: df['Date']
Out[17]:
0 2017-01-01
Name: Date, dtype: datetime64[ns]
Документ pd.read_csv
на самом деле рекомендует использовать to_datetime
когда формат даты и времени не является стандартным форматом:
https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html
Если столбец или индекс содержит неразборчивую дату, весь столбец или индекс будет возвращен без изменений в качестве типа данных объекта. Для нестандартного анализа даты и времени используйте pd.to_datetime после pd.read_csv