Я использую панду DataFrame с индексированием даты и времени.Из документации Xarray я знаю, что индексирование даты и времени может выполняться как ds['date.year']
, где ds - это массив данных xarray, дата, индекс даты и годы дат.Xarray указывает на компоненты datetime , что снова приводит к DateTimeIndex , последний является документацией панды.Поэтому я подумал сделать то же самое с пандами, так как мне действительно нравится эта функция.
Однако она не работает для меня.Вот что я сделал до сих пор:
# Import required modules
import pandas as pd
import numpy as np
# Create DataFrame (name: df)
df=pd.DataFrame({'Date': ['2017-04-01','2017-04-01',
'2017-04-02','2017-04-02'],
'Time': ['06:00:00','18:00:00',
'06:00:00','18:00:00'],
'Active': [True,False,False,True],
'Value': np.random.rand(4)})
# Combine str() information of Date and Time and format to datetime
df['Date']=pd.to_datetime(df['Date'] + ' ' + df['Time'],format = '%Y-%m-%d %H:%M:%S')
# Make the combined data the index
df = df.set_index(df['Date'])
# Erase the rest, as it is not required anymore
df = df.drop(['Time','Date'], axis=1)
# Show me the first day
df['2017-04-01']
Хорошо, так что это показывает мне только первые записи.Все идет нормально.Однако
df['Date.year']
приводит к KeyError: 'Date.year'
Я ожидал бы вывод как
array([2017,2017,2017,2017])
Что я делаю не так?
РЕДАКТИРОВАТЬ:
У меня есть обходной путь, который я могу продолжить, но я все еще не удовлетворен, так как это не объясняет мой вопрос.Я не использовал pandas DataFrame , но xarray Dataset , и теперь это работает:
# Load modules
import pandas as pd
import numpy as np
import xarray as xr
# Prepare time array
Date = ['2017-04-01','2017-04-01', '2017-04-02','2017-04-02']
Time = ['06:00:00','18:00:00', '06:00:00','18:00:00']
time = [Date[i] + ' ' + Time[i] for i in range(len(Date))]
time = pd.to_datetime(time,format = '%Y-%m-%d %H:%M:%S')
# Create Dataset (name: ds)
ds=xr.Dataset({'time': time,
'Active': [True,False,False,True],
'Value': np.random.rand(4)})
ds['time.year']
, что дает:
<xarray.DataArray 'year' (time: 4)>
array([2017, 2017, 2017, 2017])
Coordinates:
* time (time) datetime64[ns] 2017-04-01T06:00:00 ... 2017-04-02T18:00:00