Ошибка при сортировке по столбцу, содержащему строки и числа

Подскажите, почему происходит ошибка при сортировке по столбцу, если он содержит текст и числа?

import pandas as pd
import numpy as np

df = pd.DataFrame(
    {
        "A": ["foo", 1, "foo", "bar", "foo", "bar", "foo", "foo"],
        "B": ["one", "one", "two", "three", "two", "two", "one", "three"],
        "C": np.random.randn(8),
        "D": np.random.randn(8),
    }
)
df.sort_values(by=["A"])

Получаю ошибку:

TypeError: '<' not supported between instances of 'int' and 'str'

Ответы (1 шт):

Автор решения: CrazyElf

Ну потому что непонятно, как сравнивать числа и строки (а для сортировки нужно сравнивать). Можно принудительно сделать всё строками в момент сравнения:

df.sort_values(by=["A"], key=lambda x: x.astype(str))
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^ сортируем как строки

Но учтите, что сравнение (и сортировка) чисел и строк происходит по-разному, например: 2 < 10, но '2' > '10'.

Если хотите чтобы было всегда "натуральное" сравнение строк и чисел, то нужно использовать специальные библиотеки вроде natsort.

→ Ссылка