不可损坏类型:“list”E

2024-04-25 08:05:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我得到以下代码的这个错误

def cleaning(CURRENT,STRING,NEXT):
    data.ix[data[NEXT].str.contains(STRING,na=False),CURRENT] =...
    data[NEXT][data[NEXT].str.contains(STRING,na=False)]
d = ['lower','Less']
c = a[5:]
for x,y in zip(range(len(c)),d):
    cleaning(c[x],d,c[x+1])
    cleaning(c[x],d,c[x+2])

在这里,数据是一个pandas数据帧。 但是对于同一个函数,下面的代码中没有错误

^{pr2}$

我知道这是因为我们不能使用列表作为dict中的键,但我不确定这是怎么发生的,为什么它对一个循环有效,而对另一个循环无效。在


Tags: 数据代码falsedatastringdef错误current
1条回答
网友
1楼 · 发布于 2024-04-25 08:05:37

您正在传递d,一个列表,作为STRING参数:

d = ['lower','Less']
# ...
    cleaning(c[x],d,c[x+1])
    #             ^

第二个示例可以工作,而是传入y,它是b列表中的单个元素:

^{pr2}$

默认情况下,pandas.Series.str.contains方法接受regex,re.compile使用字典作为缓存来保存已编译的模式。因为您传入了一个列表,所以会出现错误:

>>> pandas.Series(['aa', 'bb', 'cc']).str.contains(['a'])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/mjpieters/Development/venvs/stackoverflow-2.7/lib/python2.7/site-packages/pandas/core/strings.py", line 1458, in contains
    regex=regex)
  File "/Users/mjpieters/Development/venvs/stackoverflow-2.7/lib/python2.7/site-packages/pandas/core/strings.py", line 222, in str_contains
    regex = re.compile(pat, flags=flags)
  File "/Users/mjpieters/Development/venvs/stackoverflow-2.7/lib/python2.7/re.py", line 194, in compile
    return _compile(pattern, flags)
  File "/Users/mjpieters/Development/venvs/stackoverflow-2.7/lib/python2.7/re.py", line 237, in _compile
    p, loc = _cache[cachekey]
TypeError: unhashable type: 'list'

修复方法是传入y,而不是d

for x, y in zip(range(len(c)) ,d):
    cleaning(c[x], y, c[x + 1])
    cleaning(c[x], y, c[x + 2])

您可能需要想出更好的变量名;一个字母的名称很难区分,很容易导致这样的错误。在

相关问题 更多 >