我正在使用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])
这是我第一次在这里发帖。我希望编辑没问题。
答案 0 :(得分: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
答案 1 :(得分:0)
看起来你有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