【问题标题】:replace string datetime to epoch in pandas dataframe在熊猫数据框中将字符串日期时间替换为纪元
【发布时间】:2018-04-03 09:05:53
【问题描述】:

我的数据框看起来像:

Time,User,value 2018-03-30T14:18:49.600,U101,23 2018-03-30T14:18:49.800,U102,22 2018-03-30T14:18:50.000,U101,24

我想在 DataFrame 的 Time 列中将字符串时间戳更改为以毫秒为单位的纪元。我可以通过将值保存在列表列表中并遍历每一行来做到这一点。但是我需要一种有效的方法,这样我就可以在 Dataframe 本身中将字符串时间替换为纪元时间。提前致谢。

【问题讨论】:

    标签: python pandas python-datetime


    【解决方案1】:

    我认为需要转换to_datetime,然后转换为numpy array,并转换为int64,最后除以10**6,因为本机格式为nanoseconds:

    df['Time'] = pd.to_datetime(df['Time']).values.astype(np.int64) // 10**6
    print (df)
                Time  User  value
    0  1522419529600  U101     23
    1  1522419529800  U102     22
    2  1522419530000  U101     24
    

    【讨论】:

      【解决方案2】:
      df['Time'] = (df['Time'] - pd.Timestamp("1970-01-01")) // pd.Timedelta('1s')
      

      是 pandas 推荐的解决方案,reference

      示例:

      import pandas as pd
      df = pd.DataFrame()
      df['Time'] = pd.date_range('2012-10-08 18:15:05', periods=4, freq='D')
      df['Epoch'] = (df['Time'] - pd.Timestamp("1970-01-01")) // pd.Timedelta('1s')
      print(df)
      

      输出:

                       Time       Epoch
      0 2012-10-08 18:15:05  1349720105
      1 2012-10-09 18:15:05  1349806505
      2 2012-10-10 18:15:05  1349892905
      3 2012-10-11 18:15:05  1349979305
      

      【讨论】:

        【解决方案3】:

        我不知道'epoch' 对你来说是什么,但总的来说pandas.apply 函数是你想要的。它的工作原理类似于 python 内置函数中的map。 (假设timestamp.epoch返回时间戳的纪元)

        import datetime as dt 
        def helper(val):
           time = dt.datetime.strptime(dtstring, '%Y-%m-%d %H:%M:%S.%f')
           return dt.epoch()
        df['Time'] = df['Time'].apply(helper)
        

        【讨论】:

          猜你喜欢
          • 2019-07-21
          • 2018-10-14
          • 1970-01-01
          • 2017-05-20
          • 2020-12-19
          • 2012-04-03
          • 2018-02-18
          • 2021-07-28
          • 1970-01-01
          相关资源
          最近更新 更多