熊猫-查找该行的空列并在一列中更新

时间:2019-03-21 14:21:43

标签: python python-3.x pandas dataframe

我在下面的代码中读取Excel值

import pandas as pd
import numpy as np
import os

df = pd.read_excel(os.path.join(os.getcwd(), 'TestData.xlsx'))
print(df)

Excel数据为

    Employee ID First Name Last Name    Contact Technology  Comment
0            1   KARTHICK      RAJU  9500012345       .NET      
1            2       TEST            9840112345       JAVA      
2            3                 TEST  9145612345        AWS      
3            4                       9123498765     Python      
4            5       TEST      TEST  9156478965              

如果任何单元格包含True,则下面的代码将返回empty value

print(df.isna())

如下所示

   Employee ID  First Name  Last Name  Contact  Technology  Comment
0        False       False      False    False       False     True
1        False       False       True    False       False     True
2        False        True      False    False       False     True
3        False        True       True    False       False     True
4        False       False      False    False        True     True

我想为下面的每一行添加评论

Comment

Last Name is empty
First Name is empty
First Name and Last Name are empty
Technology is empty

一种方法是遍历每一行以查找空索引,并根据索引comments进行更新。

如果表中包含大量数据,则迭代可能不是一个好主意

有没有办法以更Python化的方式实现这一目标?

1 个答案:

答案 0 :(得分:3)

您可以简化解决方案,并isare使用-,将矩阵乘法DataFrame.dot与布尔掩码和具有新值的列一起使用,最后用{{ 3}}:

#if column exist
df = df.drop('Comment', axis=1)

df['Comment'] = df.isna().dot(df.columns + '-empty, ').str.rstrip(', ')
print (df)
   Employee ID First Name Last Name     Contact Technology  \
0            1   KARTHICK      RAJU  9500012345       .NET   
1            2       TEST       NaN  9840112345       JAVA   
2            3        NaN      TEST  9145612345        AWS   
3            4        NaN       NaN  9123498765     Python   
4            5       TEST      TEST  9156478965        NaN   

                             Comment  
0                                     
1                    Last Name-empty  
2                   First Name-empty  
3  First Name-empty, Last Name-empty  
4                   Technology-empty