【问题标题】:Excel Data with HH:MM:SS format strip failing带有 HH:MM:SS 格式条的 Excel 数据失败
【发布时间】:2019-03-28 00:03:09
【问题描述】:

由我不拥有的系统提供的 excel 文件将项目或任务的工作小时数提供为 HH:MM:SS,如果它是 23 小时或更短时间,通常不会有问题。任何时候是 24 小时或更长时间,python 都会将此视为 1/1/1900 00:00:00,但源文件显示类似 37:00:00

我需要在 excel 文件中解析该字段以获取 37 作为 int。

我尝试了以下方法:

df['Planned working time'].map(lambda x: (x, x.split(":"))) gives me 'datetime.time' object has no attribute 'split'

df['Planned working time'].map(lambda x: datetime.datetime.strptime(str(x), "%H:%M:%S")) 给我的时间数据'1900-01-01 00:00:00' 与format '%H:%M:%S 不匹配

【问题讨论】:

  • '%H:%M:%S' 对于您可能想要做的超过 24 小时的任何时间计算都是无用的,因此 1900 无关紧要;给它一年才有意义。您可以随时strftime 将其返回到最后的时间戳。
  • 如果是时间 stovfl 我同意这是相关的,但它不是时间字段。

标签: python excel datetime


【解决方案1】:

您的 df['Planned working time'] 包含非字符串格式的数据,因此您将无法应用 .split() 并且也与您的 %H:%M:%S 格式不匹配,因为 Excel 文件中还有一个日期(单元格值)。

您可以尝试将其延迟转换为字符串并从拆分中获取第一个值。

df['Planned working time'].astype(str).apply(lambda x: int(x.split()[-1].split(':')[0]))

它删除日期,然后获取: 之前的第一个元素并将其转换为整数。

【讨论】:

  • 关闭,但如果是 30:00:00 的项目,它只会拾取 3。
  • 这很奇怪,你能告诉我数据框中的值吗?所以基本上int('30')应该被解析为30。
  • 系列中有 14K+ 行。我会尝试隔离该行并向您展示。
  • 如果您能够突出显示 30:00:00 被解析为 3,您应该能够只选择该行或打印其值。
  • 其实我错了:2462171 Task1 sdwived 6 是您拆分的输出。输入是2462171 Task1 sdwived 30:00:00
猜你喜欢
  • 2014-03-02
  • 1970-01-01
  • 1970-01-01
  • 2017-02-24
  • 2018-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-29
相关资源
最近更新 更多