Оцените каждое поле в функции Python

Я пытаюсь оценить каждое поле в операторе if ниже.

Однако я сталкиваюсь со следующей ошибкой: Метод col([class java.util.ArrayList]) не существует.

Чего я пытаюсь достичь: я пытаюсь оценить два поля в своем фрейме данных - имя и фамилию в функции Python. В этих полях у меня есть значения NULL. Для каждого поля я хотел бы определить, существуют ли значения NULL.

Я загружаю различные наборы данных с полями, которые должны оцениваться из каждого набора. Я хотел бы передать эти поля в функцию, чтобы проверить, существуют ли значения NULL.

def identifyNull(Field):

Field = ['Name', 'Surname'] - this is an example of what I would like to pass to my function. 

for x in Field:
  if df.select().filter(col(Field).isNull()).count() > 0:
    print(Field)
  else:
    print('False')

df = имя фрейма данных для данных, которые я читаю.

структура дф:

ИмяФамилия
ДжонДоу
НУЛЕВОЙДжеймс
ЛизаНУЛЕВОЙ

Обратите внимание: я совершенно не знаком с Python и Spark.

Что такое дф?

Stefan 08.04.2022 16:45

@Stefan df = имя фрейма данных для данных, которые я читаю. Надеюсь, это имеет смысл.

sqlenthusiast 08.04.2022 16:52

Вы имели в виду if df.select().filter(col( x).isNull()).count() > 0:, а затем print(x)? (Иначе какой смысл вносить ваш список Field?

JNevill 08.04.2022 16:54

@JNevil Я хотел бы передать два поля в функцию. Я загружаю различные наборы данных с полями, которые должны оцениваться из каждого набора. Я хотел бы передать эти поля в функцию, чтобы проверить, существуют ли значения NULL.

sqlenthusiast 08.04.2022 17:03

Верно. Вы хотите передать каждое поле по одному в функцию, но вы передаете список в функцию. x это ваше поле. Ваш цикл for говорит «Возьмите каждый элемент в этом списке под названием fields и назовите этот элемент x». Многие языки программирования используют синтаксис For Each x in fields, который немного понятнее. Python просто отбрасывает Each, поэтому это не так многословно.

JNevill 08.04.2022 17:16
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
5
39
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы звоните col(Field) с полем — это список. Поскольку вы перебираете поля, попробуйте вместо этого использовать col(x).

Так что это будет что-то вроде этого:

for x in Field:
    if df.where(F.col('Name').isNull()).count() > 0:
        print(x)
    else:
        print('False')
Ответ принят как подходящий

Предполагая

data = [["John", "Doe"], 
        [None, "James"],
        ["Lisa", None]]
Field = ["Name", "Surname"]
df = spark.createDataFrame(data, Field)
df.show()

возвращает:

+----+-------+
|Name|Surname|
+----+-------+
|John|    Doe|
|null|  James|
|Lisa|   null|
+----+-------+

Затем

for x in Field:
    if df.select(x).where(x+" is null").count()>0:
        print(x)
    else:
        print(False)

возвращает:

Name
Surname

Другие вопросы по теме