【问题标题】:convert to datetime based on condition根据条件转换为日期时间
【发布时间】:2022-11-30 04:00:32
【问题描述】:

我想将我的日期时间对象转换为秒

0       49:36.5
1       50:13.7
2       50:35.8
3       50:37.4
4       50:39.3
        ...    
92    1:00:47.8
93    1:01:07.7
94    1:02:15.3
95    1:05:03.0
96    1:05:29.6
Name: Finish, Length: 97, dtype: object

问题是索引 92 处的格式更改导致错误:ValueError: expected hh:mm:ss format before 。

当我尝试将列转换为秒时导致此错误

filt_data["F"] = pd.to_timedelta('00:'+filt_data["Finish"]).dt.total_seconds()

当我分两步进行转换时,它可以工作,但会产生两个不同的列,我不知道如何合并,看起来也不是很有效:

filt_data["F1"] = pd.to_timedelta('00:'+filt_data["Finish"].loc[0:89]).dt.total_seconds()
filt_data["F2"] = pd.to_timedelta('0'+filt_data["Finish"].loc[90:97]).dt.total_seconds()

上面的代码不会导致任何错误并完成工作,但会产生两个不同的列。知道怎么做吗?

理想情况下,我想遍历该列并基于格式 i.E. “50:39.3”或“1:00:47.8”向对象添加“00:”或“0”。

【问题讨论】:

  • 您应该创建一个函数来处理日期时间转换并将其应用于该列或创建一个新函数。该函数本身应该处理如何转换每种情况。例如,按记录长度或某些正则表达式使用简单的 if 子句。
  • 基本问题是您没有 datetime 对象,您有时间的 str 表示形式,pandas 将其视为对象。正如@Tsingis 所说,创建一个函数来转换为日期时间对象或时间对象,并使用它用真实的日期时间对象更新完成列
  • 我明白那个。我的想法是将字符串调整为特定的日期时间格式,然后将其转换为日期时间对象类型。但正如我所写,我不知道如何处理这个问题。我知道拥有一个功能对我来说是最好的选择

标签: pandas


【解决方案1】:

我会使用str.replace

pd.to_timedelta(df['Finish'].str.replace('^(d+:d+.d+)', r'0:', regex=True))

输出:

0    0 days 00:49:36.500000
1    0 days 00:50:13.700000
2    0 days 00:50:35.800000
3    0 days 00:50:37.400000
4    0 days 00:50:39.300000
92   0 days 01:00:47.800000
93   0 days 01:01:07.700000
94   0 days 01:02:15.300000
95          0 days 01:05:03
96   0 days 01:05:29.600000
Name: Finish, dtype: timedelta64[ns]

【讨论】:

    猜你喜欢
    • 2018-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多