Seaborn парный участок и значения NaN

Я пытаюсь понять, почему это не удается, хотя в документации сказано:

  

dropna: логический, необязательный   Удалите пропущенные значения из данных перед построением.

from matplotlib import pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns
sns.__version__
# '0.7.dev'
# generate an example DataFrame
a = pd.DataFrame(data={
    'a': np.random.normal(size=(100,)),
    'b': np.random.lognormal(size=(100,)),
    'c': np.random.exponential(size=(100,))})
sns.pairplot(a) # this works as expected
# snip
b = a.copy()
b.iloc[5,2] = np.nan # replace one value in col 'c' by a NaN
sns.pairplot(b) # this fails with error 
                # "AttributeError: max must be larger than min in range parameter."
                # in histogram(a, bins, range, normed, weights, density)"
> sns.pairplot(b, dropna=True) # same error as above
4 голоса | спросил Diziet Asahi 18 J000000Saturday15 2015, 19:58:29

2 ответа


0

Я собираюсь опубликовать ответ на свой вопрос, хотя он не решает проблему в целом, но по крайней мере решает мою проблему.

Проблема возникает при попытке нарисовать гистограммы. Однако, похоже, что kde гораздо более устойчивы к отсутствующим данным. Следовательно, это работает, несмотря на то, что NaN в середине кадра данных:

from matplotlib import pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns
sns.__version__
# '0.7.dev'
# generate an example DataFrame
a = pd.DataFrame(data={
    'a': np.random.normal(size=(100,)),
    'b': np.random.lognormal(size=(100,)),
    'c': np.random.exponential(size=(100,))})
a.iloc[5,2] = np.nan # replace one value in col 'c' by a NaN
sns.pairplot(a, diag_kind='kde')
ответил Diziet Asahi 13 Jpm1000000pmFri, 13 Jan 2017 17:38:52 +030017 2017, 17:38:52
0

когда вы используете данные напрямую, т.е.

sns.pairplot(b) #Same as sns.pairplot(b, x_vars=['a','b','c'] , y_vars=['a','b','c'],dropna=True)

Вы строите графики для всех столбцов в DataFrame, затем убедитесь, что нет: строк одинаковы во всех столбцах.

sns.pairplot(b, x_vars=['a','c'] , y_vars=['a','b','c'],dropna=True)

В этом случае он работает нормально, но на графике будет разница в несколько минут для удаления значения NaN.

  

Итак, если вы хотите построить график со всеми данными, тогда: -

  • либо нулевые значения должны быть заменены с использованием "fillna ()",

  • или вся строка, содержащая «значения нани», должна быть удалена

    b = b.drop(b.index[5])
    sns.pairplot(b)
    

     pairplot для пропущенных значений

ответил Suresh2692 15 TueEurope/Moscow2015-12-15T12:07:03+03:00Europe/Moscow12bEurope/MoscowTue, 15 Dec 2015 12:07:03 +0300 2015, 12:07:03

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132