Python 如何组合dataframe的列以创建一个可以用作索引的datetime列?

Python 如何组合dataframe的列以创建一个可以用作索引的datetime列?,python,datetime,pandas,timestamp,Python,Datetime,Pandas,Timestamp,我正在使用Python进行数据分析 我有一个来自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 2

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

我有一个来自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这件事会发生在我的约会时间上?我无法手动设置自己的时间范围,因为到处都缺少日期点

我也尝试过:

df['timestamp'] = pd.to_datetime(df['jaar'] + df['maand'] + df['dag'] + df['uur'] + df['minuten'] + df['seconden'])
我可以将它们组合起来得到一行的时间戳,但是我有太多的数据,所以我不能使用循环来实现这一点

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])

这是我第一次在这里发帖。我希望编辑可以。

看起来您有
int
d类型,因此一种方法是使用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
您可以使用(某些值因测试而更改):