将字符串或系列类型转换为仅具有时间的pandas类型

2024-10-03 19:26:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我现在对类型很困惑。
我最近从Rstudio搬到了python。
假设

x = '20:05:20'
y = '20:06:10'

那么x和y只是字符串,即使它们代表时间。
为了只获取时间数据而不获取日期,我经常使用

^{pr2}$

在pd.to_日期时间(x,格式=“%H:%M:%S”).time()

datetime.time(20, 5, 20)

在pd.to_日期时间(y,格式=“%H:%M:%S”).time()

datetime.time(20, 6, 10)

但是,当我把x和y作为一个数据帧后,这个代码就不再工作了。
如果你愿意,你可以试试。在

ttmm公司=pd数据帧({'ttme':[x,y]})
ttmm['ttme']

0    20:05:20
1    20:06:10
Name: ttme, dtype: object

在pd.to_日期时间(ttmm['ttme',格式='%H:%M:%S')。time()
然后我得到了这个错误信息。在

AttributeError: 'Series' object has no attribute 'time'

为什么这样不行?在


Tags: to数据字符串类型datetimeobjecttime格式
2条回答

虽然两者使用相同的函数pd.to_datetime,但返回的类对象不同。 你可以试试,然后你就得到了。在

pd.to_datetime(x, format='%H:%M:%S')

退货:

^{pr2}$

如果您阅读源代码,pd.to_datetime函数返回DatetimeIndex对象,DatetimeIndex对象具有“time”属性。在

但是,pd.to_datetime(ttme['time'], format='%H:%M:%S')函数返回:

<class 'pandas.core.series.Series>

Series对象具有“dtypes/values/name…”属性,但不包括“time”。所以AttributeError: 'Series' object has no attribute 'time'消息是绝对正确的。在

首先让我们回答你的问题:当执行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())
    

相关问题 更多 >