Не видя каких-либо дополнительных данных, чтобы понять, почему вы пропускаете столбцы, нам придется проверить, что делает pd.DataFrame.corr
.
Как указано в документации вычисляет попарные корреляции столбцов.Поскольку вы не указали никаких аргументов, он использует метод по умолчанию и вычисляет r Пирсона , который измеряет линейную корреляцию между двумя переменными (X, Y) и может принимать значения от -1 до 1, соответствующиек точной отрицательной линейной корреляции с точной положительной линейной корреляцией и всеми значениями между ними, где 0 не является корреляцией (т. е. график X относительно Y является случайным, а линейная регрессия будет соответствовать плоскому наклону).
Для нечисловых переменных не существует понятия корреляции (по крайней мере, в контексте r Пирсона и этого ответа), а pd.DataFrame.corr
просто игнорирует нечисловые (то есть, не-целые или нецелые значения) иотбрасывает эти столбцы, объясняя, почему у вас меньше столбцов.
Если ваши пропущенные значения на самом деле являются числовыми, но хранятся (например) в виде строк, вам, вероятно, необходимо преобразовать их перед вызовом .corr()
.
Например:
x = np.random.rand(10)
y = np.random.rand(10)
x_scaled = x*6
cat = ['one', 'two', 'three', 'four', 'five',
'six','seven', 'eight', 'nine', 'ten']
df = pd.DataFrame({'x':x, 'y':y, 'x_s':x_scaled, 'cat':cat})
df.corr()
возвращает:
x y x_s
x 1.000000 -0.470699 1.000000
y -0.470699 1.000000 -0.470699
x_s 1.000000 -0.470699 1.000000
, которая является нашей корреляционной матрицей, но наш нечисловой столбец (cat
) был удален.
Если вы строите различные числовые переменные для каждогоиначе вы получите следующий график:
, который помогает выделить различные корреляции: случайно существует отрицательная линейная корреляция между x
и y
.