В:
import pandas as pd
df = pd.DataFrame([[{'a', 'b'}], [{'b','c'}], [{'b', 'a'}]])
df
ВНЕ:
0
0 {a, b}
1 {c, b}
2 {a, b}
В:
df.duplicated()
ВНЕ:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-77-7cc63ba1ed41> in <module>()
----> 1 df.duplicated()
venv/lib/python3.5/site-packages/pandas/util/decorators.py in wrapper(*args, **kwargs)
89 else:
90 kwargs[new_arg_name] = new_arg_value
---> 91 return func(*args, **kwargs)
92 return wrapper
93 return _deprecate_kwarg
venv/lib/python3.5/site-packages/pandas/core/frame.py in duplicated(self, subset, keep)
3100
3101 vals = (self[col].values for col in subset)
-> 3102 labels, shape = map(list, zip(*map(f, vals)))
3103
3104 ids = get_group_index(labels, shape, sort=False, xnull=False)
TypeError: type object argument after * must be a sequence, not map
Я ожидаю:
0 False
1 False
2 True
dtype: bool
pd.show_versions()
вывод:
INSTALLED VERSIONS
------------------
commit: None
python: 3.5.1.final.0
python-bits: 64
OS: Linux
OS-release: 4.3.0-1-amd64
machine: x86_64
processor:
byteorder: little
LC_ALL: None
LANG: ru_RU.UTF-8
pandas: 0.18.0
nose: None
pip: 1.5.6
setuptools: 18.8
Cython: None
numpy: 1.10.4
scipy: None
statsmodels: None
xarray: None
IPython: 4.1.2
sphinx: None
patsy: None
dateutil: 2.5.1
pytz: 2016.1
blosc: None
bottleneck: None
tables: None
numexpr: None
matplotlib: 1.5.1
openpyxl: None
xlrd: None
xlwt: None
xlsxwriter: None
lxml: None
bs4: None
html5lib: 0.999
httplib2: None
apiclient: None
sqlalchemy: 1.0.12
pymysql: None
psycopg2: 2.6.1 (dt dec pq3 ext lo64)
jinja2: 2.8
boto: None
Наверное. вы используете значение в виде списка ВНУТРИ ячейки кадра. Это довольно неэффективно и обычно не поддерживается. pull-request принимает исправление в любом случае.
Текущая pandas дает немного другую ошибку TypeError ( TypeError: unhashable type: 'set'
), которая действительно подходит к делу - как бы вы дедуплицировали наборы или списки? В отличие от кортежей и примитивных типов, они не являются хешируемыми (наборы могут быть преобразованы в фрозенсеты, которые являются хешируемыми), поэтому вам нужно придумать стратегию дедупликации.
В любом случае, поскольку вы имеете дело с объектом dtype, нет гарантии, что следующая строка не будет содержать набор или список, поэтому с этого момента дедупликация только ухудшится. Таким образом, pandas рассматривает каждое значение как отдельное и обрабатывает их, пока они доступны для хеширования. Просто попробуйте столбец с тремя кортежами, он будет работать, затем измените последний на набор, и он потерпит неудачу на этом самом значении.
Итак, я не уверен, что есть надежная реализация, которая будет работать здесь, учитывая отсутствие хэшируемости в списках, потенциально может быть исправление для наборов, которые будут преобразованы в frozensets при вставке хеш-карты, но это действительно кажется хакерским и произвольным .
Как насчет игнорирования нехэшируемых столбцов с целью удаления дубликатов?
Подобно добавлению kwarg 'unhashable_type', значение по умолчанию которого равно 'raise' (которое работает как текущее), но может быть установлено на 'ignore' (с риском отбрасывания строк, которые не полностью дублируются).
Самый полезный комментарий
Как насчет игнорирования нехэшируемых столбцов с целью удаления дубликатов?
Подобно добавлению kwarg 'unhashable_type', значение по умолчанию которого равно 'raise' (которое работает как текущее), но может быть установлено на 'ignore' (с риском отбрасывания строк, которые не полностью дублируются).