python - 如何在具有 numpy 数组的列的数据框中删除重复项?
问题描述
我正在尝试删除重复项,它适用于普通的 pandas 列,但是当我尝试在一个 numpy 数组的列上执行此操作时出现错误:
new_df = new_df.drop_duplicates(subset=['ticker', 'year', 'embedding'])
我收到此错误:
4 frames
/usr/local/lib/python3.7/dist-packages/pandas/core/algorithms.py in _factorize_array(values, na_sentinel, size_hint, na_value, mask)
509 table = hash_klass(size_hint or len(values))
510 uniques, codes = table.factorize(
--> 511 values, na_sentinel=na_sentinel, na_value=na_value, mask=mask
512 )
513
pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.factorize()
pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable._unique()
TypeError: unhashable type: 'numpy.ndarray'
另外,如果它有帮助,这就是我的数据的外观:
ticker year embedding
0 a.us 2020.0 [0.0, 0.0, 0.0, 0.62235785, 0.0, 0.27049118, 0...
1 a.us 2020.0 [0.0, 0.0, 0.0, 0.62235785, 0.0, 0.27049118, 0..
我考虑过转换为字符串,但我需要 pandas 列中的数组保持为 numpy,所以我不确定如何在这里干净地删除重复项。
解决方案
在这里我会做什么:
>>> df
ticker year embedding
0 a.us 2020 [0.0, 0.0, 0.0, 0.62235785, 0.0, 0.27049118]
1 a.us 2020 [0.0, 0.0, 0.0, 0.62235785, 0.0, 0.27049118]
>>> cond1 = df.drop(columns="embedding").duplicated()
>>> cond1
0 False
1 True
dtype: bool
>>> cond2 = pd.DataFrame(df["embedding"].to_list()).duplicated()
>>> cond2
0 False
1 True
dtype: bool
要删除重复值:
>>> df[~(cond1 & cond2)]
ticker year embedding
0 a.us 2020 [0.0, 0.0, 0.0, 0.62235785, 0.0, 0.27049118]
推荐阅读
- vb.net - 使用 TableAdapter 获取新插入行的 Key
- css - 对 CSS 网格中的列跨度不按预期工作感到困惑
- java - 接收器未在 android studio 中接收广播
- django - Django REST API 泛型显示不正确
- java - HashMap.tableSizeFor(...)。这段代码如何四舍五入到 2 的下一个幂?
- c++ - Qt - 从索引 x 到末尾的样式字符
- scala - 在 Play Framework 中使用多个 WS 请求检索多个片段的 API 响应
- php - PHP联系表格验证/ URL问题
- sql - SQL 'WHERE NOT some condition' 不排除条件
- opencl - OrangePi Lite2 OpenCL 驱动程序