簡體   English   中英

在 Pandas 中將字符串轉換為 timedelta

[英]Convert string to timedelta in pandas

我有一個系列,其中時間戳的格式為HHHHH:MM

timestamp = pd.Series(['34:23', '125:26', '15234:52'], index=index)

我想將其轉換為 timedelta 系列。

現在我設法在一個字符串上做到這一點:

str[:-3]
str[-2:]
timedelta(hours=int(str[:-3]),minutes=int(str[-2:]))

如果可能的話,我想以更簡潔的方式將它應用到整個系列中。 有沒有辦法做到這一點?

您可以使用按列的 Pandas 方法:

s = pd.Series(['34:23','125:26','15234:52'])

v = s.str.split(':', expand=True).astype(int)
s = pd.to_timedelta(v[0], unit='h') + pd.to_timedelta(v[1], unit='m')

print(s)

0     1 days 10:23:00
1     5 days 05:26:00
2   634 days 18:52:00
dtype: timedelta64[ns]

正如評論中所指出的,這也可以在一行中實現,盡管不太清楚:

s = pd.to_timedelta((s.str.split(':', expand=True).astype(int) * (60, 1)).sum(axis=1), unit='min')

這就是我將如何做到的:

timestamp = pd.Series(['34:23','125:26','15234:52'])
x = timestamp.str.split(":").apply(lambda x: int(x[0])*60 + int(x[1]))
timestamp = pd.to_timedelta(x, unit='s')

像這樣以秒為單位解析增量作為pd.to_timedelta的參數,

In [1]: import pandas as pd
In [2]: ts = pd.Series(['34:23','125:26','15234:52'])
In [3]: secs = 60 * ts.apply(lambda x: 60*int(x[:-3]) + int(x[-2:]))
In [4]: pd.to_timedelta(secs, 's')
Out[4]:
0     1 days 10:23:00
1     5 days 05:26:00
2   634 days 18:52:00
dtype: timedelta64[ns]

編輯:錯過了 ercyp 的答案,它也可以工作,但您需要將pd.to_timedelta的參數乘以 60,因為如果我pd.to_timedelta的話,分鍾不能作為經過時間的度量,除了模前一小時。

您可以使用pandas.Series.apply ,即:

def convert(args):
    return timedelta(hours=int(args[:-3]),minutes=int(args[-2:]))
s = pd.Series(['34:23','125:26','15234:52'])
s = s.apply(convert)

暫無
暫無

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

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