#python #python-3.x #pandas #dataframe
#python #python-3.x #pandas #фрейм данных
Вопрос:
Ниже приведен код для чтения значений 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
может быть обновлен.
Если таблица содержит огромные данные, итерация может оказаться не очень хорошей идеей
Есть ли способ добиться этого более питоническим способом?
Ответ №1:
Вы можете упростить решение и установить is
и are
использовать -
, используя умножение матрицы DataFrame.dot
с булевой маской и столбцами с новым значением, последний разделитель удалить на DataFrame.dot
:
#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
Комментарии:
1. Работает отлично. Спасибо! 50 🙂