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