我可以将数据框中的字符串数据更改为特定格式的日期时间吗?

时间:2019-07-04 23:58:47

标签: python dataframe datetime

我想将数据框中的字符串数据更改为日期时间数据 但它不起作用 例如我这里有数据框数据

TotTime
D1 12:24:13.88
D1 12:24:14.88
D1 12:24:15.88
D1 12:24:16.88
D1 12:24:17.88

,我想在日期时间更改此数据以进行计算 我该怎么办?

我尝试如下

df.StepTime = pd.to_datetime(df.StepTime)

dfn['totTime'] = dfn.totTime.apply(lambda totTime: datetime.strptime(totTime, 'D%d %H:%M:%S'))

dfn['totTime'] = dfn.totTime.apply(lambda totTime: parse(totTime))

但它不起作用

2 个答案:

答案 0 :(得分:0)

我想,您可能不需要datetime类型,而需要使用timedelta类型。

datetime类型用于确切的日期和时间点。

timedelta用于不同长度的时间段。

我是根据您代码中的“ TotTime”命名的。

您可以使用以下代码从字符串中创建timedelta类型:

def get_days(_str):
  return int(_str[1:]) # assume first simbol is 'D' and others is number of days

def get_mss(_str): #assume format is 15.88
  s_ms = _str.split('.')
  s = int(s_ms[0])
  ms = int(s_ms[1]) * 10 # 0.88 is 880 milliseconds, not 88
  return s, ms

def get_seconds(_str): # assume format is 12:24:15.88
  hms = _str.split(':')
  h = int(hms[0])
  m = int(hms[1])
  s, ms = get_mss(hms[2])
  return h, m, s, ms

def str_to_td(_str):
  dt1 = _str.split(' ')
  days = get_days(dt1[0])
  h, m, s, ms = get_seconds(dt1[1])
  return datetime.timedelta(days = days, hours = h, minutes = m, seconds = seconds, milliseconds = ms)

答案 1 :(得分:0)

尝试将 temperature precipitation brooklyn manhattan williamsburg queensboro date 2016-10-27 8.6 35.81 651 1558 2137 1902 2016-10-28 7.5 0.00 2021 3872 4271 3202 2016-10-29 10.6 0.00 1639 3160 4027 2920 2016-10-30 19.1 14.22 1702 2971 3531 2547 2016-10-31 9.4 0.00 2648 4876 5440 3720 temperature precipitation brooklyn manhattan williamsburg queensboro date 2016-10-27 8.6 35.81 651 1558 2137 1902 2016-10-28 7.5 0.00 2021 3872 4271 3202 2016-10-29 20.0 0.00 1639 3160 4027 2920 2016-10-30 20.0 14.22 1702 2971 3531 2547 2016-10-31 20.0 0.00 2648 4876 5440 3720 temperature precipitation brooklyn manhattan williamsburg queensboro temperature_f date 2016-10-27 8.6 35.81 651 1558 2137 1902 8.6 2016-10-28 7.5 0.00 2021 3872 4271 3202 7.5 2016-10-29 20.0 0.00 1639 3160 4027 2920 20.0 2016-10-30 20.0 14.22 1702 2971 3531 2547 20.0 2016-10-31 20.0 0.00 2648 4876 5440 3720 20.0 与datetime64数据类型一起使用。

.astype()