属性错误:'TimedeltaProperties'对象没有'minute'属性。

12

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

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' 属性

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

3个回答

18

你的列'time'是timedelta类型,正如错误信息所述,你可以使用total_seconds()方法将其转换为秒,并除以60得到分钟。

如果你想要一个完整的日期时间列,可以将'date'和'time'合并。然后你就可以使用.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

3

@Fobersteiner的回答很好,但为了完整起见,我想补充一点,您还可以将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的方法。


3

如果您还没有将数据转换为datetime类型的dataframe,请先进行转换,然后创建一个新的列,如下所示:

df['minute'] = df['date'].dt.minute

或者这里的方法

  df[new]= df[column].map(lambda x: datetime.datetime(x.minutes))

1
谢谢你的回答。我刚试了一下,现在它给了我“AttributeError: 'Timedelta' object has no attribute 'minutes'”错误。我不明白'Timedelta'和'TimedeltaProperties'之间的区别。 - Le Noff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接