![](/img/trans.png)
[英]How do I combine the float values of two columns and put it in an another column of my dataframe?
[英]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.