【问题标题】:convert string 'yyyy-mm-dd hh:mm:ss' date to integer (pandas, python)将字符串'yyyy-mm-dd hh:mm:ss'日期转换为整数(熊猫,python)
【发布时间】:2013-12-19 18:32:32
【问题描述】:

我需要将格式为yyyy-mm-dd hh:mm:ss(代表datetime)的两个字符串之间的差异转换为integer。由于我想对 DataFrame 对象的所有索引(使用 pandas 构建)执行此操作,因此我需要一个内置函数来执行类似

的操作
data['difference'] = somefunc(data['date1'],data['date2'])

这样的功能存在吗?如果我构建自己的函数,如何将其应用于 DataFrame 列?

提前致谢!

【问题讨论】:

    标签: python datetime pandas


    【解决方案1】:

    查看此链接:http://docs.python.org/2/library/time.html?highlight=strptime 基本上,您可以将字符串解析为 struct_time 变量,然后通过属性(tm_hour、tm_min...)访问这些值。

    检查 time.strptime 的示例。

    【讨论】:

      【解决方案2】:

      需要 numpy >= 1.7。这适用于 pandas 0.13(即将发布)。请参阅文档here

      In [3]: df = DataFrame(dict(A = Timestamp('20130101'), B = Timestamp('20130101')+ pd.to_timedelta(list(range(5)),unit='D')))
      
      In [4]: df
      Out[4]: 
                          A                   B
      0 2013-01-01 00:00:00 2013-01-01 00:00:00
      1 2013-01-01 00:00:00 2013-01-02 00:00:00
      2 2013-01-01 00:00:00 2013-01-03 00:00:00
      3 2013-01-01 00:00:00 2013-01-04 00:00:00
      4 2013-01-01 00:00:00 2013-01-05 00:00:00
      
      [5 rows x 2 columns]
      
      In [5]: df.dtypes
      Out[5]: 
      A    datetime64[ns]
      B    datetime64[ns]
      dtype: object
      
      In [6]: df['C'] = df['B']-df['A']
      
      In [7]: df
      Out[7]: 
                          A                   B                C
      0 2013-01-01 00:00:00 2013-01-01 00:00:00         00:00:00
      1 2013-01-01 00:00:00 2013-01-02 00:00:00 1 days, 00:00:00
      2 2013-01-01 00:00:00 2013-01-03 00:00:00 2 days, 00:00:00
      3 2013-01-01 00:00:00 2013-01-04 00:00:00 3 days, 00:00:00
      4 2013-01-01 00:00:00 2013-01-05 00:00:00 4 days, 00:00:00
      
      [5 rows x 3 columns]
      
      In [8]: df.dtypes
      Out[8]: 
      A     datetime64[ns]
      B     datetime64[ns]
      C    timedelta64[ns]
      dtype: object
      
      In [9]: df['C'].astype('timedelta64[s]')
      Out[9]: 
      0         0
      1     86400
      2    172800
      3    259200
      4    345600
      Name: C, dtype: float64
      

      在 0.12 中你可以这样做

      In [1]: df = DataFrame(dict(A = Timestamp('20130101'), B = [Timestamp('20130101')+timedelta(days=i) for i in range(5) ]))
      
      In [2]: df['C'] = df['B']-df['A']
      
      In [3]: Series(df['C'].values / np.timedelta64(1,'s'))
      Out[3]: 
      0         0
      1     86400
      2    172800
      3    259200
      4    345600
      dtype: float64
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-03
        • 1970-01-01
        • 2019-02-16
        • 2018-05-19
        • 2019-01-14
        • 1970-01-01
        相关资源
        最近更新 更多