2016-10-28 14 views
-1

私は次のコード非ハッシュタイプ:「リスト」エラー

ここ
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]) 

ために、このエラーを取得していますが、データはパンダのデータフレームです。 は、しかし、私は次のコード

a = ['UBC','LBC', 'HC', 'FC', 'P:C/F','P', 'A', 'Sex'] 
b = ['upper','lower','hair','footwear'] 
for x,y in zip(range(len(a)),b): 
    cleaning(a[x],y,a[x+1]) 
    cleaning(a[x],y,a[x+2]) 

に何のエラーを取得していないよ、同じ機能のために私たちは辞書でキーとしてリストを使用することはできませんので、これは知っているが、私はそれが起こっているかどうかはわかりませんここで、なぜそれは1つのループではなく、他のループでは機能しているのですか?

+1

'STRING'引数として' d'、リストを渡しています。代わりに 'y'を渡すことを意味しましたか? –

+0

また、 'a'とは何ですか? 'a'がリストのリストであれば、' c [...] 'はリストであり、それは' NEXT'として渡されます。 –

+0

例外の**完全なトレースバック**を含めてください。私は勘違いしていましたが、私はただそれを確認しましたが、トレースバックがこれをはるかに明確にするでしょう。 –

答えて

1

あなたはSTRING引数として、dにリストを渡している。

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

あなたの第二の例は動作しますが、あなたがbリストから単一の要素である、代わりにyに渡す:

b = ['upper','lower','hair','footwear'] 
for x,y in zip(range(len(a)),b): 
    #^one element from b ^
    cleaning(a[x],y,a[x+1]) 
    #   ^

pandas.Series.str.containsメソッドはデフォルトで正規表現を受け入れ、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]) 

あなたはより良い変数名を思い付くしたいこともあるでしょう。 1文字の名前は区別が難しく、簡単にこれらのようなエラーにつながります。

+0

ああ、なんて愚かなこと!ありがとう、私はそれを念頭に置くでしょう。 –

関連する問題