AttributeError: 'TimedeltaProperties' 对象没有属性 'minute'

新手上路,请多包涵

我有一个看起来像这样的数据框

df

[output]:
date        time
2020-02-28  00:30:45
2020-02-28  00:30:45
2020-03-09  00:21:06
2020-03-09  00:21:06
2020-03-09  00:21:06

df.time.dtype

[output]: dtype('<m8[ns]')

我想使用以下命令提取时间变量中的分钟数

df.time.dt.minute

但是相反,我有这个错误

AttributeError: ‘TimedeltaProperties’ 对象没有属性 ‘minute’

有人知道如何解决这个问题吗?

原文由 Le Noff 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 799
2 个回答

您的“时间”列是 timedelta 正如错误告诉您的那样;您可以使用 total_seconds() 方法转换为秒并除以 60 得到分钟。

如果您想要一个功能齐全的日期时间列,请组合“日期”和“时间”。然后你可以使用 .dt.minute

前任:

 import pandas as pd
df = pd.DataFrame({'time': pd.to_timedelta(['00:30:45','00:30:45','00:21:06','00:21:06','00:21:06']),
                   'date': pd.to_datetime(['2020-02-28','2020-02-28','2020-03-09','2020-03-09','2020-03-09'])})

# to get the "total minutes":
df['minutes'] = df['time'].dt.total_seconds()/60
df['minutes']
# 0    30.75
# 1    30.75
# 2    21.10
# 3    21.10
# 4    21.10
# Name: minutes, dtype: float64

[pd.Timedelta 文档]

 # to get a column of dtype datetime:
df['DateTime'] = df['date'] + df['time']

# now you can do:
df['DateTime'].dt.minute
# 0    30
# 1    30
# 2    21
# 3    21
# 4    21
# Name: DateTime, dtype: int64

原文由 FObersteiner 发布,翻译遵循 CC BY-SA 4.0 许可协议

@Fobersteiner 的回答非常好,但为了完整起见,我想补充一点,您还可以将 dtype 的列 timedelta 除以固定的 timedelta 。例如:

 from datetime import timedelta
import pandas as pd
df = pd.DataFrame({'time': pd.to_timedelta(['00:30:45','00:30:45','00:21:06','00:21:06','00:21:06']),
                   'date': pd.to_datetime(['2020-02-28','2020-02-28','2020-03-09','2020-03-09','2020-03-09'])})

# to get the "total minutes":
df['minutes'] = df['time'] / timedelta(minutes=1)  # <--
df['minutes']

Out[9]:
0    30.75
1    30.75
2    21.10
3    21.10
4    21.10
Name: minutes, dtype: float64

虽然就个人而言,我更喜欢@Fobersteiner 的方法。

原文由 Dr_Zaszuś 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题