Ошибка при сортировке по столбцу, содержащему строки и числа
Подскажите, почему происходит ошибка при сортировке по столбцу, если он содержит текст и числа?
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.