繁体   English   中英

如何组合我的数据框的列来创建一个我可以用作索引的日期时间列?

[英]How do I combine columns of my dataframe to create one datetime column which I can use as my index?

我正在使用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])

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

您可以使用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

它看起来你有int dtypes所以一个方法是使用apply构建datetime并将所有列作为params:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM