【问题标题】:How do I combine columns of my dataframe to create one datetime column which I can use as my index?如何组合我的数据框的列来创建一个可以用作索引的日期时间列?
【发布时间】:2016-06-25 14:37:20
【问题描述】:

我正在使用 Python Pandas 进行数据分析。

我有一个从 excel 文件中提取的数据框,其中有 6 列描述时间戳(年、月、日、小时、分钟、秒)。我想创建一个 pandas.datetime 变量,但是当我使用 pd.to_datetime() 函数这样做时,会发生以下情况:

我的数据框(df):

jaar maand  dag uur minuten seconden
2005    7   1   0   0        0
2005    7   1   0   10       0
2005    7   1   0   20       0
2005    7   1   0   30       0
2005    7   1   0   40       0
2005    7   1   0   50       0

我做了什么:

df['timestamp'] = pd.to_datetime(df['jaar'] + df['maand'] + df['dag'] + df['uur'] + df['minuten'] + df['seconden'])

但是我的 df.['timestamp'] 系列的项目将如下所示:

1970-01-01 00:00:00.20050701000000
1970-01-01 00:00:00.20050701001000
1970-01-01 00:00:00.20050701002000

合并日期的正确方法是什么?为什么 1970-01-01 的事情会发生在我的日期时间上?我无法手动设置自己的时间范围,因为这里和那里缺少日期点。

我也尝试过:

我可以将它们结合起来得到一行的时间戳,但是我有太多的数据,我不能使用循环来做到这一点。

date00 = pd.datetime(df.iloc[0, 0], df.iloc[0, 1], df.iloc[0, 2], df.iloc[0, 3], df.iloc[0, 4], df.iloc[0, 5])

这是我第一次在这里发帖。我希望编辑没问题。

【问题讨论】:

    标签: python datetime pandas timestamp


    【解决方案1】:

    您可以使用to_datetime(为了测试而更改了一些值):

    print df
       jaar  maand  dag  uur  minuten  seconden
    0  2005      7    1    0        0        10
    1  2005      7    1   20       10         0
    2  2005      7    1    4       20        12
    3  2005      7    1    0       30         0
    4  2005      7    1    0       40         0
    5  2005      7    1    0       50         0
    
    df['timestamp'] = pd.to_datetime(df['jaar']*10000000000
                                    +df['maand']*100000000
                                    +df['dag']*1000000
                                    +df['uur']*10000
                                    +df['minuten']*100
                                    +df['seconden'],format='%Y%m%d%H%M%S')
    print df
       jaar  maand  dag  uur  minuten  seconden           timestamp
    0  2005      7    1    0        0        10 2005-07-01 00:00:10
    1  2005      7    1   20       10         0 2005-07-01 20:10:00
    2  2005      7    1    4       20        12 2005-07-01 04:20:12
    3  2005      7    1    0       30         0 2005-07-01 00:30:00
    4  2005      7    1    0       40         0 2005-07-01 00:40:00
    5  2005      7    1    0       50         0 2005-07-01 00:50:00
    

    【讨论】:

      【解决方案2】:

      看起来你有int dtypes,所以一种方法是使用apply 构造datetime,并将所有列作为参数:

      In [381]:
      import pandas as pd
      import datetime as dt
      df.apply(lambda x: dt.datetime(x['jaar'], x['maand'], x['dag'], x['uur'], x['minuten'], x['seconden']), axis=1)
      
      Out[381]:
      0   2005-07-01 00:00:00
      1   2005-07-01 00:10:00
      2   2005-07-01 00:20:00
      3   2005-07-01 00:30:00
      4   2005-07-01 00:40:00
      5   2005-07-01 00:50:00
      dtype: datetime64[ns]
      

      你可以直接覆盖设置为索引:

      In [382]:
      df.index = df.apply(lambda x: dt.datetime(x['jaar'], x['maand'], x['dag'], x['uur'], x['minuten'], x['seconden']), axis=1)
      df
      
      Out[382]:
                           jaar  maand  dag  uur  minuten  seconden
      2005-07-01 00:00:00  2005      7    1    0        0         0
      2005-07-01 00:10:00  2005      7    1    0       10         0
      2005-07-01 00:20:00  2005      7    1    0       20         0
      2005-07-01 00:30:00  2005      7    1    0       30         0
      2005-07-01 00:40:00  2005      7    1    0       40         0
      2005-07-01 00:50:00  2005      7    1    0       50         0
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-04-10
        • 2016-12-04
        • 1970-01-01
        • 2016-10-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多