我现在对类型非常困惑。
我最近从Rstudio转到了python。
比方说
x = '20:05:20'
y = '20:06:10'
然后x和y只是字符串,即使它们引用时间也是如此。
为了只获取时间数据而不获取日期,我经常使用
pd.to_datetime(df,format='%H:%M:%S).time()
pd.to_datetime(x,format ='%H:%M:%S')。time()
datetime.time(20, 5, 20)
pd.to_datetime(y,format ='%H:%M:%S')。time()
datetime.time(20, 6, 10)
但是,当我将x和y设为数据框后,此代码将不再起作用。
您可以根据需要尝试。
ttmm = pd.DataFrame({'ttme':[x,y]})
ttmm ['ttme']
0 20:05:20
1 20:06:10
Name: ttme, dtype: object
pd.to_datetime(ttmm ['ttme'],format ='%H:%M:%S')。time()
然后我得到这个错误消息。
AttributeError: 'Series' object has no attribute 'time'
为什么这不起作用?
答案 0 :(得分:1)
首先让我们回答您的问题:执行pd.to_datetime(ttmm['ttme'], format='%H:%M:%S')
时您将获得一个熊猫系列。如果您要对其应用一个函数,例如time()
,您可能想要这样做:
pd.to_datetime(ttmm['ttme'], format='%H:%M:%S').apply(lambda x: x.time())
现在只有两件事:
也许是一个小错字? (用ttme代替时间):
ttmm=pd.DataFrame({'time':[x,y]})
ttmm['time']
函数to_datetime
足够聪明,可以识别时间而无需使用格式字符串。你可以不用!
pd.to_datetime(ttmm['ttme']).apply(lambda x: x.time())
答案 1 :(得分:0)
尽管两者都使用了相同的功能pd.to_datetime
,但是返回了不同的类对象。
您可以尝试一下,然后得到它。
pd.to_datetime(x, format='%H:%M:%S')
返回:
<class 'pandas._libs.tslib.timestamps.Timestamp'>
如果您阅读源代码,则pd.to_datetime
函数将返回DatetimeIndex
对象,并且DatetimeIndex
对象具有'time'属性。
但是,pd.to_datetime(ttme['time'], format='%H:%M:%S')
函数返回:
<class 'pandas.core.series.Series>
系列对象具有“ dtypes / values / name ...”属性,但不包括“ time”。因此AttributeError: 'Series' object has no attribute 'time'
消息绝对正确。