[英]Convert Representation of datetime.date to Representation of pandas.Timestamp
我已經將一堆代碼從使用datetime.date
對象轉換為使用Timestamps
。 代碼由大量單元測試覆蓋,這意味着我需要將所有實例(如"datetime.date(2016, 12, 20)"
為“Timestamp(2016-12-20)”。
簡單的解決方案是:
re.sub(r"datetime.date\((\d{4}), (\d{1,2}), (\d{1,2})\)", r"Timestamp(\1-\2-\3)", string)
在某些情況下哪種方法很好。 問題是date
使用一個或兩個數字來顯示月份和日期,而Timestamp
總是使用兩個。 因此,如果日期是datetime.date(2016, 1, 1)
"Timestamp(2016-1-1)
datetime.date(2016, 1, 1)
我將返回"Timestamp(2016-1-1)
”,但正確的表示應該是"Timestamp(2016-01-01)"
。
一些字符串實例還包含多個子字符串匹配。
有沒有辦法可以使用re.sub()
來進行這種轉換?
string = "datetime.date(2016, 2, 20)"
def repl(matchobj):
return "Timestamp(%s-%s-%s)"%(matchobj.group(1), matchobj.group(2).zfill(2), matchobj.group(3).zfill(2))
print re.sub(r"datetime.date\((\d{4}), (\d{1,2}), (\d{1,2})\)", repl, string)
輸出:
Timestamp(2016-02-20)
使用寬度為2
zfill
。
您可以使用pd.to_datetime
和eval
的組合
確保導入datetime
以使eval工作。
import datetime
import pandas as pd
pd.to_datetime(eval("datetime.date(2016, 3, 31)"))
Timestamp('2016-03-31 00:00:00')
為什么不能簡單地替換datetime.date(
使用pd.Timestamp(
:
In [26]: datetime.date(2000,1,30)
Out[26]: datetime.date(2000, 1, 30)
In [27]: pd.Timestamp(2000,1,30)
Out[27]: Timestamp('2000-01-30 00:00:00')
In [28]: datetime.date(2000,1,3)
Out[28]: datetime.date(2000, 1, 3)
In [29]: pd.Timestamp(2000,1,3)
Out[29]: Timestamp('2000-01-03 00:00:00')
正則表達式:
re.sub(r'datetime.date\s*\(', r'pd.Timestamp(', string)
pd.Timestamp docstring :
TimeStamp是大熊貓相當於python的Datetime,並且 在大多數情況下可以與它互換 。 它是用於構成DatetimeIndex的條目的類型,以及用於pandas的其他面向時間序列的數據結構。
構造函數基本上有三種調用約定。 主表單接受四個參數。 它們可以通過位置或關鍵字傳遞。
參數---------- ts_input:datetime-like,str,int,float要轉換為Timestamp的值freq:str,DateOffset Offset哪個Timestamp將具有tz:string,pytz.timezone,dateutil.tz。 tzfile或無Timestamp將具有的時間區域。 unit:string numpy unit用於轉換,如果ts_input是int或float offset:str,DateOffset已棄用,請使用freq
另外兩種形式模仿
datetime.datetime
的參數。 它們可以通過位置或關鍵字傳遞,但不能兩者混合在一起。:func:
datetime.datetime
參數.. versionadded :: 0.19.0
year:int month:int day:int hour:int,optional,默認為0分鍾:int,可選,默認為0秒:int,可選,默認為0微秒:int,可選,默認為0 tzinfo:datetime.tzinfo ,可選,默認為None
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.