【问题标题】:Python: How to replace "datetime" in a Dataframe with only the Day represented as integer value?Python:如何将数据框中的“日期时间”替换为仅表示为整数值的日期?
【发布时间】:2019-06-24 06:34:16
【问题描述】:

我正在处理一个名为“Data”的数据框,它包含两列,一列是用户 ID,另一列是日期时间对象:

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'])

【问题讨论】:

  • 你问我们怎么办datetime.datetime(1970, 1, 1).day?如果是这样,不问问题而是自己找到对象包含的内容的一个非常好的方法是执行print(dir(variable))。在这种情况下,您会清楚地看到您可以为 datetime 对象执行 .day.year
  • 嗨@Torxed,我首先将数据从字符串转换为日期时间对象Data["eventTime"] = [datetime.strptime(x, '%Y-%m-%d %H:%M:%S') for x in Data["eventTime"]],不幸的是我不知道如何从中提取日期。这真的是我的问题......
  • Data["eventTime"][0].day 看起来。

标签: python-3.x datetime dataframe integer transform


【解决方案1】:

举个例子:

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)

【讨论】:

  • @john 谢谢!也请查看 Arran Duff 的答案。我认为他的方式更清晰一些,可能更快。
【解决方案2】:
df['eventTime'] = df['eventTime'].dt.day

应该工作 - 假设 df 是您的数据框 像这样执行向量操作是处理数据帧的最有效方式

【讨论】:

  • 比我的回答好。我一直忘记你可以做df.column.dtdf.column.str 类型的操作!
猜你喜欢
  • 2021-11-23
  • 2023-01-31
  • 1970-01-01
  • 2021-12-27
  • 2019-11-21
  • 1970-01-01
  • 1970-01-01
  • 2015-03-25
  • 2021-11-22
相关资源
最近更新 更多