Как проверить, содержит ли столбец список в Pandas (Python)?

#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