仅使用熊猫将字符串或系列类型转换为时间

时间:2018-08-09 08:15:14

标签: python pandas datetime

我现在对类型非常困惑。
我最近从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'

为什么这不起作用?

2 个答案:

答案 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())

现在只有两件事:

  1. 也许是一个小错字? (用ttme代替时间):

    ttmm=pd.DataFrame({'time':[x,y]})
    ttmm['time']
    
  2. 函数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'消息绝对正确。