Python.Извлечь столбец даты в несколько столбцов «день недели», месяц ... в пандах - PullRequest
0 голосов
/ 12 сентября 2018

Я пытаюсь преобразовать столбец «Дата» в несколько столбцов «день недели» ... и т. Д. Я не уверен, почему это всегда застревает после приблизительно 2000 шагов. Поскольку данных достаточно много, я также хотел бы знать, есть ли более быстрый способ сделать это. Спасибо.

trainset.head()

Zone_ID Дата Hour_slot Hire_count

0 1 2016-02-01 0 0

1 1 2016-02-01 1 0

2 1 2016-02-01 2 0

3 1 2016-02-01 3 0

4 1 2016-02-01 4 0

trainset.shape

(219600, 4)

Это то, что у меня есть

TrainSet = trainset.copy()
TrainSet['w'] = 0
TrainSet['j'] = 0
TrainSet['U'] = 0
TrainSet['W'] = 0

for i in range(trainset.shape[0]):
    TrainSet.loc[i, 'w'] = datetime.datetime.strptime(trainset.loc[i,'Date'], "%Y-%m-%d").strftime('%w')
    TrainSet.loc[i, 'j'] = datetime.datetime.strptime(trainset.loc[i,'Date'], "%Y-%m-%d").strftime('%j')
    TrainSet.loc[i, 'U'] = datetime.datetime.strptime(trainset.loc[i,'Date'], "%Y-%m-%d").strftime('%U')
    TrainSet.loc[i, 'W'] = datetime.datetime.strptime(trainset.loc[i,'Date'], "%Y-%m-%d").strftime('%W')
    print(i)

1 Ответ

0 голосов
/ 12 сентября 2018

Вы должны использовать методы Pandas / NumPy с серией datetime, а не с ручным циклом. Вот функциональное решение с использованием operator.itemgetter:

from operator import attrgetter

# example dataframe
df = pd.DataFrame({'date': ['2017-05-01 15:00:20', '2018-11-30 10:01:11']})
df['date'] = pd.to_datetime(df['date'])

# list attributes
dt_attrs = ['year', 'hour', 'month', 'day', 'dayofweek']

# extract attributes
attributes = df['date'].apply(attrgetter(*dt_attrs))

# add attributes to dataframe
df[dt_attrs] = pd.DataFrame(attributes.values.tolist())

Результат:

                 date  year  hour  month  day  dayofweek
0 2017-05-01 15:00:20  2017    15      5    1          0
1 2018-11-30 10:01:11  2018    10     11   30          4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...