簡體   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