#python #pandas
Вопрос:
Когда я запускаю a drop_duplicates
в своем фрейме данных, я получаю сообщение unhashable type: list
об ошибке. Это потому, что мой df
содержит списки. Однако для меня неочевидно, что это так. Когда я запускаю df.dtypes
столбцы, они возвращаются как object
.
Я мог бы это сделать df.apply(lambda x: str(x) if isinstance(x, list) else x)
, что все усложняет. Однако есть и другие недоступные типы, которые я должен был бы попробовать. Например, насколько я знаю, существуют словари или кортежи, содержащие изменяемые значения, и это приведет к той же ошибке
Чтобы преодолеть это, мне пришлось вручную проверить свой df, чтобы выяснить, какие столбцы являются списком, и обработать их соответствующим образом (удаление их сработало).Мне это не нравится. Есть ли более простая команда pandas для возврата столбцов, содержащих списки? Например, может быть что-то вроде, если мой фрейм данных:
df = pd.DataFrame([[1, 'a', [1,2,3]], [2, "b", [4,5,6]]], columns = ["number", "letter", "unhashable"])
Что выглядит как:
number letter unhashable
0 1 a [1, 2, 3]
1 2 b [4, 5, 6]
Тогда есть способ , которым я могу воспользоваться df
, что-то вроде df.detailed_dtypes
того, чтобы вернуть меня
number: int,
letter: str,
unhashable: list
Ответ №1:
Попробуйте с
df.iloc[0].map(lambda x : type(x).__name__)
Out[136]:
number int64
letter str
unhashable list
Name: 0, dtype: object