簡體   English   中英

熊貓:從3列創建時間戳:月,日,小時

[英]Pandas: create timestamp from 3 columns: Month, Day, Hour

我使用的是Python 2.7,panda 0.14.1-2,numpy 1.8.1-1。 我必須使用Python 2.7,因為我將它與在Python 3上不起作用的東西耦合在一起

我正在嘗試分析在單獨的列中輸出Month,Day和Hour的csv文件,看起來如下所示:

Month Day Hour Value 1 1 1 105 1 1 2 30 1 1 3 85 1 1 4 52 1 1 5 65

我基本上想要從這些列創建時間戳,並使用“2005”作為年份,並將此新時間戳列設置為索引。 我已經閱讀了很多類似的問題( 這里這里 ),但它們都依賴於read_csv()。 我沒有年份專欄,所以我認為這不適用於我(除了加載數據框,插入列,寫入和重做read_csv ...似乎是錯綜復雜的)。

加載數據幀后,我在位置0插入一個Year列df.insert(0,“Year”,2005)

所以現在我有了

Year Month Day Hour Value 2005 1 1 1 105 2005 1 1 2 30 2005 1 1 3 85 2005 1 1 4 52 2005 1 1 5 65 df.types告訴我所有列都是int64類型。

然后我嘗試這樣做:

df['Datetime'] = pd.to_datetime(df.Year*1000000 + df.Month*10000 + df.Day+100 + df.Hour, format="%Y%M%d%H")

但我得到“TypeError:'long'對象是無法辨認的”

另一方面,以下運行沒有錯誤。

df['Datetime'] = pd.to_datetime(df.Year*10000 + df.Month*100 + df.Day, format="%Y%M%d")

由於2.7不喜歡%Y%M%d%H,正如@EdChum指出的那樣,我嘗試分兩步:創建一個沒有小時的日期時間,然后添加小時數。 但是:輸出不是我想要的

In [1]: # Do it without hours first (otherwise doesn't work in Python 2.7)
df['Datetime'] = pd.to_datetime(df.Year*10000 + df.Month*100 + df.Day, format="%Y%M%d")

In [2]: df['Datetime']
Out [2]:
0    2005-01-01 00:01:00
1    2005-01-01 00:01:00
...
13   2005-01-01 00:01:00
14   2005-01-01 00:01:00
...
8745   2005-01-31 00:12:00
8746   2005-01-31 00:12:00
...
8758   2005-01-31 00:12:00
8759   2005-01-31 00:12:00

例如,8758應該是2005-12-31。 這有什么問題?

一旦我解決了這個問題,我就可以重新添加小時數:

In [3]: # Then add the hours
df['Datetime'] = df['Datetime'] + pd.to_timedelta(df['Hour'], unit="h")

讓pandas解析器做繁重的工作(如在第一個答案中)顯然是最好的選擇,如果你從csv獲得它。 如果您以不同的方式獲取或計算數字,請嘗試:

df['DateTime'] = df[['Year', 'Month', 'Day', 'Hour']].apply(lambda s : datetime.datetime(*s),axis = 1)

發現它仍然易於閱讀且非常靈活。

您可以使用pandas.read_csv()解析問題中的輸入文本:

#!/usr/bin/env python
from datetime import datetime
import pandas as pd

print(pd.read_csv(
    'input.txt', sep=r'\s+', parse_dates=[[0, 1, 2]],
    date_parser=lambda *columns: datetime(2005, *map(int, columns)),
    index_col=0))

產量

                     Value
Month_Day_Hour            
2005-01-01 01:00:00    105
2005-01-01 02:00:00     30
2005-01-01 03:00:00     85
2005-01-01 04:00:00     52
2005-01-01 05:00:00     65

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM