熊猫-如果单元格为空,请将pd.timedelta [ns64]单元格转换为字符串'-'

时间:2018-07-05 19:49:09

标签: python-2.7 pandas

我一直在研究python项目,以使我的团队手工设计的一些报告自动化。我遇到了一个顽固的问题,无法弄清楚自己在做什么。

基本上,我所停留的区域有4个单独的数据列,这些列我已经在下面做了通用版本。

Start Time | Finish Time | Not Usable Reason |  Start to Finish
   12:36       15:36                               3:00
   16:35       19:45        Production Defect      3:10
   19:55                    QA Failure

不可用原因在较高级别上有两个选项。空白或描述问题的文字。同样,根据问题,由于某些质量检查问题,在完成之前可能还没有记录到完成时间,导致无法使用的原因导致无法计算开始时间。

基本上,我要执行的操作是,如果有无法使用的原因,请在“开始完成”列的该行中,在该字段中输入“-”。

我曾经尝试过的代码:

processor_df['Start to Finish'] = processor_df['Finish Time'] - processor_df['Start Time']

processor_df['Start to Finish'] = processor_df['Start to Finish'].astype(str)
processor_df['Start to Finish'] = processor_df.loc[pd.isnull(processor_df['Not Usable Reason']) == False, 'Start to Finish'] == '--'
processor_df['Start to Finish'] = pd.to_timedelta(processor_df['Start to Finish'])

这仅代表专门与执行计算的一小部分有关的代码的一小部分,然后尝试适当地修改start-finish列。

同样,由于未将其更改为字符串时收到的错误,我也从timedelta-> str-> timedelta进行了操作:

ValueError: only leading negative signs are allowed

问题是我的期望输出为:

Start Time | Finish Time | Not Usable Reason |  Start to Finish
   12:36       15:36                               3:00
   16:35       19:45        Production Defect       --
   19:55                    QA Failure              --

但是上面的代码将其生成为:

Start Time | Finish Time | Not Usable Reason |  Start to Finish
   12:36       15:36                               
   16:35       19:45        Production Defect      False
   19:55                    QA Failure             False

使用检查条件是否存在以及是否可以代替条件的最佳方法是什么。当我纯粹将其用于字符串时,上述方法已经起作用,但是我的条件不是检查它是否为空白,而是检查它是否与特定值匹配。

感谢您对此的帮助,如果这是一个愚蠢的简单错误,我要感谢您两次帮助新手。

最好

安迪

1 个答案:

答案 0 :(得分:1)

我认为这是问题所在:

processor_df['Start to Finish'] = processor_df.loc[pd.isnull(processor_df['Not Usable Reason']) == False, 'Start to Finish'] == '--'

基本上,您正在使用布尔数组覆盖Start to Finish列。您在代码行中的最后一个表达式是==,它返回所有False值的布尔数组,因为字符串'--'当然不在该列的任何单元格中。

下面的行应该可以解决问题:

processor_df.loc[processor_df['Not Usable Reason'].notnull() , 'Start to Finish'] = '--'

我们使用.loc(通常建议我开始出于习惯而不是使用方括号而不是方括号来进行索引)来获取我们有'Not Usable Reason'和第{{1 }},我们(使用赋值运算符'Start to Finish'将字符串=分配给这些单元格。