簡體   English   中英

使用年份規范將列“日”轉換為日期時間

[英]Convert column 'day' to datetime with year specification

我有一個 dataframe ,其中包括一列已知年份的日期:

print (df)
        year  day  time  
0       2012  227   800
15      2012  227   815
30      2012  227   830
...     ...   ...   ...
194250  2013  226  1645
194265  2013  226  1700

我試圖將日期數字轉換為日期時間%m-%d使用:

import pandas as pd    
df['day'] = pd.to_datetime(df['day'], format='%j').dt.strftime('%m-%d')

這使:

        year    day  time
0       2012  08-15   800
15      2012  08-15   815
30      2012  08-15   830
...     ...   ...     ...
194250  2013  08-14  1645
194265  2013  08-14  1700

但是這種轉換是不正確的,因為 2012 年的第 227 天是 8 月 14 日(08-14)。 我相信這個錯誤是由於轉換中缺少年份規范。

如何在轉換中指定年份以獲得 a) %Y-%m-%d ; b) %m-%d ; c) %Y-%m-%dT%H:%M來自 dataframe 我有嗎?

謝謝

您可以轉換為字符串並輸入pd.to_datetime ,您可以使用正確的解析指令提供:

import pandas as pd

df = pd.DataFrame({'year': [2012, 2012], 'day' : [227, 228], 'time': [800, 0]})

df['datetime'] = pd.to_datetime(df.year.astype(str) + ' ' +
                                df.day.astype(str) + ' ' +
                                df.time.astype(str).str.zfill(4), 
                                format='%Y %j %H%M')

df['datetime']

0   2012-08-14 08:00:00
1   2012-08-15 00:00:00
Name: datetime, dtype: datetime64[ns]

格式化為字符串只是通過dt訪問器調用strftime ,例如

df['datetime'].dt.strftime('%Y-%m-%dT%H:%M')

0    2012-08-14T08:00
1    2012-08-15T00:00
Name: datetime, dtype: object

您可以嘗試將year轉換為 datetime 類型,將day轉換為 timedelta 類型,記住要偏移日期:

dates = pd.to_datetime(df['year'], format='%Y') + \
        pd.to_timedelta(df['day'] -1, unit='D')  

Output:

0        2012-08-14
15       2012-08-14
30       2012-08-14
194250   2013-08-14
194265   2013-08-14
dtype: datetime64[ns]

然后使用strftime提取日期-月份:

df['day'] = dates.dt.strftime('%M-%D')

暫無
暫無

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

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