【问题标题】:Convert and order timestamps转换和订购时间戳
【发布时间】:2018-08-03 00:48:26
【问题描述】:

我有一个 pandas df 时间戳列,其中包含午夜之前的 HH:MM 和午夜之后的 HH:MM:SS。最终我想对这些值进行排序。

import pandas as pd

d = ({
    'A' : ['08:00','12:00','24:00:00','20:00','16:00','26:00:00'],
    })

df = pd.DataFrame(data=d)

我无法将 :00 添加到列中,因为它会返回:

df['A'] = [x + ':00' for x in df['A']]

             A
0     08:00:00
1     12:00:00
2  24:00:00:00
3     20:00:00
4     16:00:00
5  26:00:00:00

我的预期输出是:

          A
0  08:00:00
1  12:00:00
4  16:00:00
3  20:00:00
2  24:00:00
5  26:00:00

【问题讨论】:

  • 总是:00 还是你可以有20:02

标签: python pandas sorting time


【解决方案1】:

使用字符串切片:

df['A'] = df['A'].str[:5] + ':00'

print(df)

          A
0  08:00:00
1  12:00:00
2  24:00:00
3  20:00:00
4  16:00:00
5  26:00:00

【讨论】:

    【解决方案2】:

    也许在您的数据中使用 np.where 以防万一 24:00:01

    np.where(df.A.str.len()==5,df.A+':00',df.A)
    Out[187]: 
    array(['08:00:00', '12:00:00', '24:00:00', '20:00:00', '16:00:00',
           '26:00:00'], dtype=object)
    

    【讨论】:

      【解决方案3】:

      使用带有 str.replace 的正则表达式:

      df.A.str.replace(r'(^\d+:\d+$)', r'\1:00')
      
      0    08:00:00
      1    12:00:00
      2    24:00:00
      3    20:00:00
      4    16:00:00
      5    26:00:00
      

      【讨论】:

        【解决方案4】:

        还有一个答案(仅在短字符串中添加秒数):

        df.loc[df["A"].str.len()==5, "A"] += ":00"
        

        【讨论】:

          【解决方案5】:

          即使你有 24:00:04 这样的东西也可以使用(我这样说是因为它不会直接将其更改为 24:00:00):

          import pandas as pd
          
          d = ({
              'A' : ['08:00','12:00','24:00:04','20:00','16:00','26:00:00'],
              })
          
          df = pd.DataFrame(data=d)
          print(df['A'].apply(lambda x: x if len(x.split(':'))==3 else x+':00'))
          

          输出:

          0    08:00:00
          1    12:00:00
          2    24:00:04
          3    20:00:00
          4    16:00:00
          5    26:00:00
          Name: A, dtype: object
          

          【讨论】:

            猜你喜欢
            • 2018-12-25
            • 1970-01-01
            • 1970-01-01
            • 2021-07-18
            • 2018-11-10
            • 1970-01-01
            • 2016-11-26
            • 1970-01-01
            相关资源
            最近更新 更多