[英]Python and pandas: subtracting and formatting dataframe
我想在 python 2.x 中減去兩個數據幀並將結果格式化為 hh:mm:ss。 我的問題是我假設 delta 列是一個字符串並且它是一個數字。 我需要幫助,因為我正在努力讓它發揮作用。 我已經搜索並嘗試了在其他帖子中找到的一些解決方案,但我無法解決。
actual= ...select now()
這是 df
begin actual
0 2018-01-31 16:45:04.263 2018-01-31 16:48:06
1 2018-01-31 16:10:26.000 2018-01-31 16:50:06
現在:
df['actual'] = pd.to_datetime(df['actual'])
df['delta'] = df['actual'] - df['begin']
df['delta'] = df['delta'].apply(lambda x: str(x)[-8:])
結果是這樣的: 39:49 和 2.737000 。 對於第二個,我想要與第一個相同的格式。 我試過像這樣改變函數:
df['delta'] = df['delta'].apply(lambda x: pd.Timedelta(seconds=int(x.total_seconds())))
但它返回:
AttributeError: 'Timestamp' object has no attribute 'total_seconds'
任何想法將不勝感激。
我認為你需要:
print (df.dtypes)
begin datetime64[ns]
actual datetime64[ns]
dtype: object
df['delta'] = (df['actual'] - df['begin']).dt.total_seconds()
print (df)
begin actual delta
0 2018-01-31 16:45:04.263 2018-01-31 16:48:06 181.737
1 2018-01-31 16:10:26.000 2018-01-31 16:50:06 2380.000
如果想要格式化是可能的,但有點瘋狂(不是通用的解決方案,因為天數已被刪除):
df['delta'] = (df['actual'] - df['begin']).astype(str).str[7:15]
print (df)
begin actual delta
0 2018-01-31 16:45:04.263 2018-01-31 16:48:06 00:03:01
1 2018-01-31 16:10:26.000 2018-01-31 16:50:06 00:39:40
df['delta'] = (df['actual'] - df['begin']).astype(str)
print (df)
begin actual delta
0 2018-01-31 16:45:04.263 2018-01-31 16:48:06 0 days 00:03:01.737000000
1 2018-01-31 16:10:26.000 2018-01-31 16:50:06 0 days 00:39:40.000000000
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.