Как я могу проверить, является ли значение nan или списком?

#python #pandas #numpy

#python #pandas #numpy

Вопрос:

В настоящее время я работаю с pandas DataFrame s. Во время итерации по нему я хочу проверить, является ли значение numpy.nan или списком.

 for i, row in df.iterrows():
value = row["Name"]
if pd.isnull(value):
    dosomething()
  

Это работает просто отлично, за исключением того, что

 type(value) == list
  

Затем я подумал, может быть, поместить any() вокруг:

 for i, row in df.iterrows():
value = row["Name"]
if any(pd.isnull(value)):
    dosomething()
  

Но теперь я получаю исключение каждый раз, когда значение имеет значение NaN , потому что оно, очевидно, не может быть повторено.

Есть ли лучшее решение, чем проверка типа значения?

Ответ №1:

Используйте or :

 for i, row in df.iterrows():
    value = row["Name"]
    if pd.isnull(value) or (type(value) == list):
        dosomething()
  

Другой способ проверки isinstance :

 for i, row in df.iterrows():
    value = row["Name"]
    if pd.isnull(value) or isinstance(value, list):
        dosomething()
  

Комментарии:

1. Но я все равно получаю сообщение об ошибке, если тип (значение) ==список (ValueError: истинное значение массива с более чем одним элементом неоднозначно. Используйте.any() или.all())

2. @aAnnAa — Возможно, дублируются столбцы, тогда нужно any(pd.isnull(value) or (type(value) == list))

3. Теперь это работает с «if not isinstance(value, list) and pd.isnull(value)», большое спасибо за вашу помощь 🙂