Python: Как заменить «время-дата» в кадре данных только днем, представленным как целочисленное значение? - PullRequest
0 голосов
/ 31 января 2019

Я имею дело с фреймом данных, который называется «Данные» и содержит два столбца: один - идентификатор пользователя, другой - объект datetime:

userid | eventTime 
1      | 2018-11-01 07:36:58
2      | 2018-11-07 08:04:12
..     | ....

Теперь моя цель - заменить запись в этом столбце данных.eventTime с только номером дня в конкретном месяце в качестве целочисленного значения, например, первый день (= 1) в ноябре и седьмой день (= 7) в ноябре.

Таким образом, результат будет

userid | eventTime 
1      | 1
2      | 7
..     | ....

Как мне это сделать?

Я уже извлек индексы из фрейма данных и попытался изменить его в цикле, но я не знаю, как он будет работать:

temp = Data.index.get_values()  #get indices from data frame

for temp, row in Data.iterrows():
    print(row['eventTime'])

Ответы [ 2 ]

0 голосов
/ 31 января 2019
df['eventTime'] = df['eventTime'].dt.day

Должно работать - при условии, что df является вашим фреймом данных. Выполнение векторной операции, подобной этой, является наиболее эффективным способом работы с фреймом данных

.
0 голосов
/ 31 января 2019

В качестве примера:

df = pd.DataFrame(data={'user': ['a', 'b', 'a', 'b'],
                        'eventTime': [datetime(2000, 1, 1),
                                      datetime(2000, 2, 2),
                                      datetime(2000, 3, 3),
                                      datetime(2000, 4, 4)]})
print(df)
#    eventTime user
# 0 2000-01-01    a
# 1 2000-02-02    b
# 2 2000-03-03    a
# 3 2000-04-04    b

Вы можете работать с определенным столбцом с помощью метода apply(), а объекты datetime предоставляют datetime.day свойство, которое дает вам день месяца в виде целого числа:

df['day'] = df.eventTime.apply(lambda x: x.day)
print(df)
#    eventTime user  day
# 0 2000-01-01    a    1
# 1 2000-02-02    b    2
# 2 2000-03-03    a    3
# 3 2000-04-04    b    4

Если вы хотите заменить столбец eventTime вместо создания нового столбца, просто используйте:

df['eventTime'] = df.eventTime.apply(lambda x: x.day)
...