【问题标题】:Python Pandas - how to convert string HH:MM:SS.mmm to float sss.ms?Python Pandas - 如何将字符串 HH:MM:SS.mmm 转换为浮点 sss.ms?
【发布时间】:2018-08-23 20:25:33
【问题描述】:

我想将字符串值 HH:MM:SS.mmm 转换为浮点值 sec.milliseconds 以进行算术计算。有没有一种直接的方法可以做到这一点,因为目前我正在通过拆分字符串函数来做到这一点,这是一个非常乏味的过程。数据框看起来像:

Col1
00:00:05.063
00:01:00.728
00:03:10.117

输出应该是这样的

  5.063
 60.728
190.117

感谢任何帮助。

【问题讨论】:

    标签: python pandas datetime type-conversion floating-point-conversion


    【解决方案1】:

    将您的列转换为timedelta,然后转换为int(在ns 中返回结果,除以1e9 得到秒数):

    pd.to_timedelta(df.Col1).astype(int) / 1e9
    
    0      5.063
    1     60.728
    2    190.117
    Name: Col1, dtype: float64
    

    【讨论】:

      【解决方案2】:

      使用to_timedelta + total_seconds:

      df['Col1'] = pd.to_timedelta(df['Col1']).dt.total_seconds()
      print (df)
            Col1
      0    5.063
      1   60.728
      2  190.117
      

      【讨论】:

      • 我试过了,效果很好。感谢您的及时回复。但是,当我运行代码 C:\Users\R15445\AppData\Local\Continuum\anaconda3\lib\site-packages\ipykernel_launcher.py:3: SettingWithCopyWarning: A value is trying to be set on a从 DataFrame 复制切片。尝试改用 .loc[row_indexer,col_indexer] = value
      • 不幸的是,这个警告没有正确显示。我想问题在于过滤 - 需要 copyhere。那么df['Col1'] = pd.to_timedelta(df['Col1']).dt.total_seconds() 上面的代码是什么?
      • 另一个可能的问题是设置值 - 检查here
      • @Kartik - 如果我的回答有帮助,请不要忘记accept 它 - 单击答案旁边的复选标记 (v) 将其从灰色切换为已填充。谢谢.
      【解决方案3】:
      df['HourandMinute'] = df['Dayandtime_call'].dt.hour + \
          df['Dayandtime_call'].dt.minute / 100
      

      【讨论】:

      • 请解释你的答案
      • 我想这里的“Dayandtime_call”应该是“Col1”,因为它在cs95的输出中是这样显示的。
      猜你喜欢
      • 1970-01-01
      • 2022-01-10
      • 2011-11-25
      • 1970-01-01
      • 2016-06-08
      • 2017-11-29
      • 1970-01-01
      • 2019-07-10
      相关资源
      最近更新 更多