Python 3.x 如何从数据集中删除重复行,其中也包括重复字典?

Python 3.x 如何从数据集中删除重复行,其中也包括重复字典?,python-3.x,dictionary,duplicates,Python 3.x,Dictionary,Duplicates,因此,我有以下数据集 data = [[1, 'abc', 25, 'V', {'REVISION': 'ac', 'VBAT': '3.000', 'POWER_MODE': 'buck', 'TEST': 'ldo_xtal', 'CS': 'bb', 'MODULE_NAME': 'ildo_xtal'}], [1, 'abc',25, 'V', {'REVISION': 'ac', 'VBAT': '3.000', 'POWER_MODE': 'buck', 'TEST': 'ldo_x

因此,我有以下数据集

data = [[1, 'abc', 25, 'V', {'REVISION': 'ac', 'VBAT': '3.000', 'POWER_MODE': 'buck', 'TEST': 'ldo_xtal', 'CS': 'bb', 'MODULE_NAME': 'ildo_xtal'}], [1, 'abc',25, 'V', {'REVISION': 'ac', 'VBAT': '3.000', 'POWER_MODE': 'buck', 'TEST': 'ldo_xtal', 'CS': 'bb', 'MODULE_NAME': 'ildo_xtal'}], [1, 'abc', 25, 'MV', {'REVISION': 'ac', 'VBAT': '3.000', 'POWER_MODE': 'buck', 'TEST': 'ldo_xtal', 'CS': 'bb', 'MODULE_NAME': 'ildo_xtal'}], [1, 'abc', 25, 'V', {'DEBUG': '1', 'REVISION': 'ac', 'VBAT': '3.000', 'POWER_MODE': 'buck', 'MODULE_NAME': 'iosc_xtal32m', 'TEST': 'xtal32m', 'CS': 'bb', 'XTAL32M_53X_OSC.VI': 1}]] 
Dataframe = pd.DataFrame(data, columns =  ['Chip_Number', 'Test_Key', 'Temp', 'Test_Data_Unit', 'Test_Label'] )
Dataframe
在我的数据集中,最后一列“Test_Label”包括每一行中的字典

我想根据“芯片编号”、“测试密钥”、“临时”、“测试数据单元”和“测试标签”列从数据集中删除重复行(首先出现)

我使用以下代码删除数据集中首次出现的重复项。然而,我得到了一个错误

#Drop the duplicates from the column of Dataframe["Chip_Number","Test_Key","Temp","Test_Data_Unit"] and only keep the last one
Dataframe.duplicated(subset = ["Chip_Number","Test_Key","Temp","Test_Data_Unit","Test_Label"]).sum()
Dataframe.loc[Dataframe.duplicated(subset = ["Chip_Number","Test_Key","Temp","Test_Data_Unit","Test_Label"], keep='last'),:]
Dataframe = Dataframe.drop_duplicates(subset = ["Chip_Number","Test_Key","Temp","Test_Data_Unit","Test_Label"],keep='last')

pd.set_option('display.max_colwidth', 10000)
Dataframe

错误,我在运行上述代码后得到

TypeError: unhashable type: 'dict'

但是,当我使用上面相同的代码而不使用“Test\u Label”
列时。它很好用。但是,这不是我的意图

有人能想出一个主意吗?我怎样才能改进上面的代码

删除重复行后,我的数据集应该是这样的?
一种可能的解决方案是将带有
dict
值的列转换为字符串。但dictionary是无序数据类型,因此我们需要首先对其进行排序:

import pandas as pd

data = [[1, 'abc', 25, 'V', {'REVISION': 'ac', 'VBAT': '3.000', 'POWER_MODE': 'buck', 'TEST': 'ldo_xtal', 'CS': 'bb', 'MODULE_NAME': 'ildo_xtal'}], [1, 'abc',25, 'V', {'REVISION': 'ac', 'VBAT': '3.000', 'POWER_MODE': 'buck', 'TEST': 'ldo_xtal', 'CS': 'bb', 'MODULE_NAME': 'ildo_xtal'}], [1, 'abc', 25, 'MV', {'REVISION': 'ac', 'VBAT': '3.000', 'POWER_MODE': 'buck', 'TEST': 'ldo_xtal', 'CS': 'bb', 'MODULE_NAME': 'ildo_xtal'}], [1, 'abc', 25, 'V', {'DEBUG': '1', 'REVISION': 'ac', 'VBAT': '3.000', 'POWER_MODE': 'buck', 'MODULE_NAME': 'iosc_xtal32m', 'TEST': 'xtal32m', 'CS': 'bb', 'XTAL32M_53X_OSC.VI': 1}]]
df = pd.DataFrame(data, columns =  ['Chip_Number', 'Test_Key', 'Temp', 'Test_Data_Unit', 'Test_Label'] )

# create temporary column with string from the dict column `Test_Label`
df['tmp'] = df['Test_Label'].apply(lambda x: ' '.join(map(str, sorted(x.items()) )))

df = df.drop_duplicates(subset = ["Chip_Number","Test_Key","Temp","Test_Data_Unit","tmp"], keep='last')

del df['tmp'] # delete temporary column

print(df)
印刷品:

   Chip_Number Test_Key  Temp Test_Data_Unit                                         Test_Label
1            1      abc    25              V  {'REVISION': 'ac', 'VBAT': '3.000', 'POWER_MOD...
2            1      abc    25             MV  {'REVISION': 'ac', 'VBAT': '3.000', 'POWER_MOD...
3            1      abc    25              V  {'DEBUG': '1', 'REVISION': 'ac', 'VBAT': '3.00...

非常感谢您@Andrej Kesely。这真的很有帮助。而且,我学到了一些新东西。再次感谢D