Python 替换方法引发错误类型错误:不可损坏类型:';列表';

Python 替换方法引发错误类型错误:不可损坏类型:';列表';,python,pandas,Python,Pandas,我有一个对象,我想用其他值替换某些值 replacements = { ['object','timedelta[ns]']: 'varchar', 'float64': 'float', 'int64': 'int', 'datetime64': 'timestamp' } 当我尝试运行上面的命令时,出现了一个错误TypeError:unhabable type:'list' 我想将replacements输入到dataframe.dtypes.replace(replacements) 编

我有一个对象,我想用其他值替换某些值

replacements = {
['object','timedelta[ns]']: 'varchar',
'float64': 'float',
'int64': 'int',
'datetime64': 'timestamp'
}
当我尝试运行上面的命令时,出现了一个错误
TypeError:unhabable type:'list'

我想将
replacements
输入到
dataframe.dtypes.replace(replacements)

编辑: 添加()使其可散列:
('object','timedelta[ns]'):'varchar',

但现在收到此错误:

TypeError:无法比较类型“ndarray(dtype=object)”和“tuple”


如果我删除
('object','timedelta[ns]'):'varchar',
有什么想法吗?

您需要将键设置为元组以使其可散列:

replacements = {
('object','timedelta64[ns]'): 'varchar',
'float64': 'float',
'int64': 'int',
'datetime64': 'timestamp'
}

此外,您需要使用
timedelta64[ns]
,而不仅仅是
timedelta[ns]
,因为您只能使用实际表示现有数据类型的字符串。类型
timedelta64[ns]
来自NumPy,其名称与之完全相同。

因为
['object','timedelta[ns]]
不能是字典中的键,它是一个列表(不可修改)。这与
replace
无关。一旦它可以散列,我会收到另一个错误,说我无法比较类型。但是如果我注释掉元组,这个错误就会消失。知道为什么吗?我想猜测一下,你应该有一个键:值对:
{'object':'varchar','timedelta[ns]':'varchar',…}
,但我不能确定使用
timedelta64[ns]
。查看我的更新答案。将它们拆分为单个键值对会导致此错误(TypeError:无法比较类型“ndarray(dtype=object)”和“str”)。它只使用timedelta[ns]字符串。看起来字符串中的[]可能有问题……不确定为什么timedelta[ns]不起作用,但timedelta64[ns]可以起作用?它不将其识别为数据类型,并将其视为字符串。