AttributeError: 'TimedeltaProperties' object has no attribute 'minute'
AttributeError: 'TimedeltaProperties' object has no attribute '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' object has no attribute 'minute'
有人知道如何解决这个问题吗?
如果您尚未转换为日期时间数据框,请先执行此操作
然后像这样创建一个新列
df['minute'] = df['date'].dt.minute
或者这里的方法
df[new]= df[column].map(lambda x: datetime.datetime(x.minutes))
你的列 'time' 是 dtype 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
# 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 的回答非常好,但为了完整起见,我想补充一点,您也可以将 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 的方法。
我有一个看起来像这样的数据框
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' object has no attribute 'minute'
有人知道如何解决这个问题吗?
如果您尚未转换为日期时间数据框,请先执行此操作 然后像这样创建一个新列
df['minute'] = df['date'].dt.minute
或者这里的方法
df[new]= df[column].map(lambda x: datetime.datetime(x.minutes))
你的列 'time' 是 dtype 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
# 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 的回答非常好,但为了完整起见,我想补充一点,您也可以将 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 的方法。