簡體   English   中英

Python 和 Pandas:減去和格式化數據框

[英]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.

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