> 文章列表 > 【Python杂事】 处理Excel中日期时间之间没有空格问题

【Python杂事】 处理Excel中日期时间之间没有空格问题

【Python杂事】 处理Excel中日期时间之间没有空格问题

目录

  • 一、数据源要求
  • 二、逻辑思路
      • 1、ROI区域
      • 2、对ROI区域进行判定
  • 三、代码实现
  • 四、成果展示
  • 总结

碰到一个非常有趣的问题:

  在我们的日常工作中,常常需要处理各种各样的数据,其中不乏包含日期时间信息的数据。有时候我们会发现这些数据中日期和时间之间没有空格,比如"2023/3/412:20:9";这样的数据让人感觉很别扭,还不利用后续数据的统计。那么,我们该怎么处理这个问题呢?  

一、数据源要求

有什么菜才能做什么饭。要先分析原材料成分,我现在拿到的数据格式是如下:
在这里插入图片描述

  • 从上到下日期时间是递增的;
  • 时间格式是:0:00:00类型的;

二、逻辑思路

1、ROI区域

年月日中的日与时分秒中的时之间;YYYY/MM/DD HH:mm:ss(红色区域)

2、对ROI区域进行判定

依出现的字符个数进行判定:

  1. 若ROI区域包含空格,则不进行处理,比如:“4 4”、“12 3”;
  2. 有4个和有2个个字符的,只能是日和时各占一半,比如:“1313”、“12”;
  3. 有三个字符的,比较复杂:
    3.1. 前两个字符必须小于32,后两个字符必须时小于24,比如:“414”、“152”;
    3.2. 对于三个字符中间存在0,则把前两个按照日来算,比如:“102”、“203”;
    3.3 对其他的三个字符无法判定的,我们需要引入一个全局变量sign,来存储最近的一个正确格式的日期,无法判定的日期就可以根据全局变量sign的日的位数,进行判定;

三、代码实现

import pandas as pd
import re,os
# 导入文件
df = pd.read_excel(r'/Users/chaizhiying/Downloads/处理日期时间空格缺失问题.xlsx',sheet_name=0)
df = df[df['日期'].notna()]
dat = [item.replace('/','-').replace(':',':') for item in df['日期'].astype('str').tolist()]
# 主要的处理逻辑函数
sign = ''
def Return_rule(wait_task):global signif ' ' in wait_task:handle_wait_task = wait_taskelif len(wait_task) == 2 or len(wait_task) == 4:handle_wait_task = str(int(wait_task[:len(wait_task)//2])) + ' ' + wait_task[len(wait_task)//2:]elif len(wait_task) == 3:if int(wait_task[:2]) > 31:handle_wait_task = wait_task[:1] + ' ' + wait_task[1:]elif int(wait_task[1:]) > 24:handle_wait_task = wait_task[:2] + ' ' + wait_task[2:]else:if wait_task[1] == '0':handle_wait_task = wait_task[:2] + ' ' + wait_task[2:]else:le = len(sign.split(' ')[0])handle_wait_task = wait_task[:le] + ' ' + wait_task[le:]sign = handle_wait_taskreturn handle_wait_taskls = []
for i in dat:wait_tas = re.findall(r'-.*-(.*?):',i,re.S)[0]handle_wait_task = Return_rule(wait_tas)result = i.split(wait_tas)[0] + handle_wait_task + i.split(wait_tas)[1]ls.append(result)
df['日期_处理后'] = ls
df.to_excel(r'/Users/chaizhiying/Downloads/处理日期时间空格缺失问题_c.xlsx')

四、成果展示

在这里插入图片描述

总结

通过这样的处理,我们可以让日期和时间更加直观和易读。如果你对这个问题感兴趣,不妨尝试一下吧!当然我处理后的日期格式统一格式
以上是一个简单的例子,希望它能够给您提供一些灵感。当然,如果有什么Bug或者改进的地方,欢迎留言评论!