簡體   English   中英

將“天”從 Timedelta object 轉換為常規 object

[英]Converting "Days" from Timedelta object to regular object

我試圖在“日”合並下面的兩個數據幀,但時間增量 object 阻止了這一點。 我的理解是,我應該能夠然后執行類似print(df['day'].days)的操作並獲得沒有“天數”的實際日期。

df1

import pandas as pd
from itertools import product

missing = pd.DataFrame(product(range(1,31), range(1,5)), columns=['date','time_of_day'])
missing = pd.concat([missing.assign(pid=_id) for _id in vec], ignore_index=True)
#pd.DataFrame(product([vec, range(1,31), range(1,5)], names=['pid','day','time_of_day']))

missing.pid = missing.pid.astype(str)

自由度 2

from timedelta import date

def random_dates(start, end, n=12):

    start_u = start.value//10**9
    end_u = end.value//10**9

    return pd.to_datetime(np.random.randint(start_u, end_u, n), unit='s')

start = pd.to_datetime('2015-01-01')
end = pd.to_datetime('2018-01-01')
random_dates(start, end)

df = pd.DataFrame({'datestamp':random_dates(start, end)})
df['date'] = pd.to_datetime(df['datestamp']).dt.date
df['time'] = pd.to_datetime(df['datestamp']).dt.time


df = pd.concat([df.assign(pid=_id) for _id in vec], ignore_index=True)

df['last'] = df\
.sort_values('date')\
.groupby('pid')['date']\
.transform('last')

df['days'] = df['last'] - df['date']
df
df['days'].days #doesn't work

合並

missing.merge(df, how = 'left', on = ['pid', 'day'])

相應的錯誤在此處輸入圖像描述

所以這將轉換為非 timedelta object 的天數:

def get_custom_str_time(x): return math.floor(x.total_seconds()/(3600*24))

df.insert(0, 'day', df['days'].apply(get_custom_str_time) )

暫無
暫無

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

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