如何使用python或Power BI清理csv文件中某一列中的杂乱数据

问题描述 投票:0回答:1

我正在制作一个仪表板,向员工(现场技术人员)展示高效的工作时间。

我有一个从应用程序导出的 CSV 文件,技术人员在执行任务时使用该文件。我实际需要的包含每项任务的工作时间的列是由现场技术人员填写的,这种方式很难提取实际的工作时间。例如,该列填充了诸如以下的值:

1 hour. 25 minutes

2h. 22m

2hours for each technician

1 hour for technician x and 2 hours for technician y

12:00 - 13:40

from 12 till 15

等等

数据集包含超过 10.000 行

我已经使用 Power BI 和 Python 尝试了不同的方法,但确实很难找到一种解决方案来清理列,其中包含提到时间的所有这些可能性。

你们对如何去做有什么建议和想法吗?你会怎么办?对于我的问题的任何想法或建议将不胜感激。非常感谢。

enter image description here

python pandas powerbi data-cleaning dashboard
1个回答
0
投票

从您提供的图像中我们可以看到,该时间可能以以下主要格式之一报告:

A.

X,X
X
(后跟
 
 h
std
stunde
stunden

B.

X
(后跟
min
minuten

C.

XX:XX - YY:YY
X bis Y

还有其他行尝试连接上述格式:

I. 添加

+
符号来指示多个任务(尽管如此,时间仍使用 [1] 或 [2] 格式之一来指示)

II. 将格式 (A) 和 (B) 连接在一起(即

1 Stunden und 40 Minuten

在确定这些可能性之后,最好的方法是自己创建一个算法,将所有时间戳转换为

HH:MM
格式。以下大纲应该可以帮助您构建它:

  1. 定义三个匹配模式 (A)、(B) 和 (C) 的正则表达式

  2. 定义一个函数

    timeExtracter()
    ,在给定输入
    funkyTime
    的情况下执行以下逻辑:

    1. 删除所有空格并将所有大写字母转换为小写(这应该使正则表达式更简单)
    2. 如果模式 (C) 匹配,则提取数字并减去时间(这已经是
      HH:MM
      格式)。
    3. 如果模式 (A) 匹配,则将小数时间转换为
      HH:MM
      格式。
    4. 如果模式 (B) 匹配,则提取数字
      MM
      并构造一个
      00:MM
      时间戳。
    5. 如果没有模式匹配,则将该行存储在某个位置以供手动检查,然后正常继续执行(这种情况很少发生,但最好以这种方式处理异常,而不是放弃代码中断)。
  3. 迭代 CSV 中的每一行并应用以下逻辑:

    1. 如果时间包含连接运算符(即
      und
      +
      ),则在运算符的位置将时间戳分成两部分,并对每个部分调用
      timeExtracter()
      。然后将它们相加,你就会得到时间戳。将其存储在某处,并中断循环迭代以继续 CSV 文件中的下一行。
    2. 否则:拨打整条线路
      timeExtracter()

由于无法访问您的文件,我无法为算法提供更稳健的形状(可能存在未考虑的极端情况),但是,我确信它适用于大多数情况。但是,根据我提供的大纲,我相信它将作为您根据实际数据进行调整的良好起点。尽管如此,如果您在实施过程中遇到任何问题,请随时与我们联系。

话虽如此,我希望这对您有所帮助...并且愿代码与您同在!

© www.soinside.com 2019 - 2024. All rights reserved.