Проблема здесь не в самом кадре данных, а в его происхождении. Я обнаружил ту же проблему, используя drop или iloc в кадре данных. Ключ - это глобальный тип, который имеет датафрейм.
Допустим, у нас есть следующий фрейм данных:
list_ex = [[1.1,2.1,3.1,4,5,6,7,8],[1.2,2.2,3.3,4.1,5.5,6,7,8],
[1.3,2.3,3,4,5,6.2,7,8],[1.4,2.4,3,4,5,6.2,7.3,8.1]]
list_ex_new=pd.DataFrame(list_ex)
Вы можете без проблем вычислить list_ex_new.corr (). Если вы проверите аргументы фрейма данных с помощью vars (list_ex_new), вы получите:
{'_is_copy': None, '_data': BlockManager
Items: RangeIndex(start=0, stop=8, step=1)
Axis 1: RangeIndex(start=0, stop=4, step=1)
FloatBlock: slice(0, 8, 1), 8 x 4, dtype: float64, '_item_cache': {}}
где dtype равно float64.
Новый фрейм данных можно определить с помощью list_new_new = list_ex_new.iloc [1:,:], и корреляции можно успешно оценить. Проверка атрибутов dataframe показывает:
{'_is_copy':,
'_data': BlockManager
Элементы: RangeIndex (начало = 0, остановка = 8, шаг = 1)
Ось 1: RangeIndex (начало = 1, остановка = 4, шаг = 1)
FloatBlock: срез (0, 8, 1), 8 x 3, dtype: float64,
'_item_cache': {}}
где dtype все еще float64.
Третий кадр данных может быть определен:
list_ex_w = [['a','a','a','a','a','a','a','a'],[1.1,2.1,3.1,4,5,6,7,8],
[1.2,2.2,3.3,4.1,5.5,6,7,8],[1.3,2.3,3,4,5,6.2,7,8],
[1.4,2.4,3,4,5,6.2,7.3,8.1]]
list_ex_new_w=pd.DataFrame(list_ex_w)
Оценка корреляции фрейма данных приведет к пустому фрейму данных, поскольку атрибуты list_ex_w выглядят следующим образом:
{'_is_copy': None, '_data': BlockManager
Items: RangeIndex(start=0, stop=8, step=1)
Axis 1: Index(['a', 1, 2, 3, 4], dtype='object')
ObjectBlock: slice(0, 8, 1), 8 x 5, dtype: object, '_item_cache': {}}
Где сейчас dtype - это 'объект', поскольку фрейм данных не согласован в своих типах есть струны и плавает вместе. Наконец, может быть сгенерирован четвертый кадр данных:
list_new_new_w = list_ex_new_w.iloc[1:,:]
в результате будет сгенерирован тот же самый блокнот, но без 'a', по-видимому, совершенно правильный кадр данных для вычисления корреляций. Однако это вернет снова пустой фрейм данных. Окончательная проверка атрибутов dataframe показывает:
vars(list_new_new_w)
{'_is_copy': None, '_data': BlockManager
Items: Index([1, 2, 3, 4], dtype='object')
Axis 1: RangeIndex(start=0, stop=8, step=1)
ObjectBlock: slice(0, 4, 1), 4 x 8, dtype: object, '_item_cache': {}}
где dtype все еще объект, поэтому метод corr возвращает пустой фрейм данных.
Эту проблему можно решить с помощью astype (float)
list_new_new_w.astype(float).corr()
Таким образом, кажется, что панды в то время, когда corr или cov среди других методов вызываются, генерируют новый фрейм данных с такими же атрибутами, игнорируя случай, когда новый фрейм данных имеет согласованный глобальный тип. Я проверял исходный код панд и понимаю, что это правильная интерпретация реализации панд.