我在下面的代码中读取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化的方式实现这一目标?
答案 0 :(得分:3)
您可以简化解决方案,并is
和are
使用-
,将矩阵乘法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