web-dev-qa-db-ja.com

データフレーム適用は軸引数を受け入れません

datarulesの2つのデータフレームがあります。

>>>data                            >>>rules
   vendor                             rule
0  googel                           0 google
1  google                           1 Dell
2  googly                           2 macbook

各ベンダーとルールの間のレーベンシュタイン類似性を計算した後、dataデータフレームに2つの新しい列を追加しようとしています。したがって、私のデータフレームには、理想的には次のような列が含まれている必要があります。

>>>data
  vendor   rule    similarity
0 googel   google    0.8

これまでのところ、この構造を返すapply関数を実行しようとしていますが、データフレームの適用はaxis引数を受け入れていません。

>>> for index,r in rules.iterrows():
...     data[['rule','similarity']]=data['vendor'].apply(lambda row:[r[0],ratio(row[0],r[0])],axis=1)
...
Traceback (most recent call last):

File "<stdin>", line 2, in <module>

File "/home/mnnr/test/env/test-1.0/runtime/lib/python3.4/site-packages/pandas/core/series.py", line 2220, in apply
mapped = lib.map_infer(values, f, convert=convert_dtype)
File "pandas/src/inference.pyx", line 1088, in pandas.lib.map_infer (pandas/lib.c:62658)
File "/home/mnnr/test/env/test-1.0/runtime/lib/python3.4/site-packages/pandas/core/series.py", line 2209, in <lambda>
f = lambda x: func(x, *args, **kwds)

TypeError: <lambda>() got an unexpected keyword argument 'axis'

誰かが私が間違っていることを理解するのを手伝ってくれませんか?私が行った変更は、新しいエラーを作成するだけです。ありがとう

6
sleepophile

Seriesapplyバージョンを呼び出していますが、axis引数を指定しても意味がないため、エラーが発生します。

あなたがした場合:

data[['rule','similarity']]=data[['vendor']].apply(lambda row:[r[0],ratio(row[0],r[0])],axis=1)

次に、これはこれが機能する単一の列dfを作成します

または、axisargを削除します。

data[['rule','similarity']]=data['vendor'].apply(lambda row:[r[0],ratio(row[0],r[0])])

更新

あなたがしていることを見て、あなたはすべてのベンダーに対する各ルールのレーベンシュタイン比を計算する必要があります。

これは次の方法で実行できます。

data['vendor'].apply(lambda row: rules['rule'].apply(lambda x: ratio(x, row))

これは、すべてのルールに対する各ベンダーの比率を計算する必要があると思います。

6
EdChum