Pandas read_csv не распознает ISO8601 как datetime dtype

В настоящее время я использую pandas для чтения файла csv в DataFrame, используя первый столбец в качестве индекса. Первый столбец находится в формате ISO 8601, поэтому в соответствии с документацией для read_csv его следует распознавать как дату и время:

In [1]: import pandas as pd
In [2]: df = pd.read_csv('data.csv', index_col=0)
In [3]: print df.head()
 U V Z Ubar Udir
2014-11-01 00:00:00 0.73 -0.81 0.46 1.0904 317.97
2014-11-01 01:00:00 1.26 -1.50 0.32 1.9590 319.97
2014-11-01 02:00:00 1.50 -1.80 0.13 2.3431 320.19
2014-11-01 03:00:00 1.39 -1.65 0.03 2.1575 319.89
2014-11-01 04:00:00 0.94 -1.08 -0.03 1.4318 318.96

Однако при запросе индекса dtype он возвращает 'object':

In [4]: print df.index.dtype
object

Затем мне нужно вручную преобразовать его в datetime dtype:

In [5]: df.index = pd.to_datetime(df.index)
In [6]: print df.index.dtype
datetime64[ns]

Есть ли способ автоматически установить индекс в datetime dtype при вызове read_csv()?

2 ответа

read_csv документация описывает параметр parse_dates:

parse_dates: boolean или список int или имен или списка списков или dict, по умолчанию False - boolean. Если True → попробуйте разобрать индекс. - список целых чисел или имен. например Если [1, 2, 3] → попытаться разобрать столбцы 1, 2, 3 каждый в качестве отдельного столбца даты. - список списков. например Если [[1, 3]] → объединить столбцы 1 и 3 и проанализировать как столбец с одной датой. - dict, например. {'Foo: [1, 3]} → анализировать столбцы 1, 3 как дату и результат вызова' foo Примечание. Для дат в формате iso8601 существует быстрый путь.

Поскольку вы хотите проанализировать индекс, вы можете использовать:

import pandas as pd
 df = pd.read_csv('data.csv', index_col=0, parse_dates=True)


Я только что добавил имя столбца для первого столбца в файле csv.

Date U V Z Ubar Udir
0 2014-11-01 00:00:00 0.73 -0.81 0.46 1.0904 317.97
1 2014-11-01 01:00:00 1.26 -1.50 0.32 1.9590 319.97
2 2014-11-01 02:00:00 1.50 -1.80 0.13 2.3431 320.19
3 2014-11-01 03:00:00 1.39 -1.65 0.03 2.1575 319.89
4 2014-11-01 04:00:00 0.94 -1.08 -0.03 1.4318 318.96
df = pd.read_csv(input_file)
df.index = pd.to_datetime(df['Date'], format='%Y-%m-%d %H:%M:%S')

Если вы хотите удалить столбец даты, вы можете использовать

df = df.drop('Date', 1)

licensed under cc by-sa 3.0 with attribution.