在panda中更改列的各种字符串格式



我一直在处理一个数据帧,其中一列(flight_time(包含飞行持续时间,所有字符串都有3种不同的格式,例如:

  • "CCD_ 2">
  • "CCD_ 3">
  • "CCD_ 4">

我想将它们全部更改为HH:MM格式,最后将数据类型从object更改为time

有人能告诉我怎么做吗?

不可能有time数据类型。您可以拥有datetime64(pd.DatetimeIndex(或timedelta64(pd.TimedeltaIndex(。在你的情况下,我认为最好有一个TimedeltaIndex,这样你就可以使用pd.to_timedelta函数:

df['flight_time2'] = pd.to_timedelta(df['flight_time'])
print(df)
# Output
flight_time       flight_time2
0   07 h 05 m    0 days 07:05:00
1     13h 55m    0 days 13:55:00
2      2h 23m    0 days 02:23:00

如果您想要datetime.time的单独时间,请使用:

df['flight_time2'] = pd.to_datetime(df['flight_time'].str.findall('d+')
.str.join(':')).dt.time
print(df)
# Output
flight_time    flight_time2
0   07 h 05 m        07:05:00
1     13h 55m        13:55:00
2      2h 23m        02:23:00

在这种情况下,flight_time2仍然具有object数据类型:

>>> df.dtypes
flight_time     object
flight_time2    object
dtype: object

但每个值都是datetime.time:的一个实例

>>> df.loc[0, 'flight_time2']
datetime.time(7, 5)

在第一种情况下,您可以使用矢量化方法,而在第二种版本中是不可能的。此外,您还松开了dt访问器。