我有两个数据框:data
和rules
。
>>>data >>>rules
vendor rule
0 googel 0 google
1 google 1 dell
2 googly 2 macbook
我计算在计算每个供应商和规则之间的Levenshtein相似度后,在data
数据框中添加两个新列。所以我的数据框理想情况下应该包含如下所示的列:
>>>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'
有人可以帮我弄清楚我做错了什么吗?我所做的任何改变都只是创造了新的错误。谢谢你
答案 0 :(得分:5)
您正在调用Series
axis
版本的apply
版本,因为错误导致data[['rule','similarity']]=data[['vendor']].apply(lambda row:[r[0],ratio(row[0],r[0])],axis=1)
arg没有意义。
如果你这样做了:
axis
然后这会产生一个单独的列df,这将是有用的
或者只是删除data[['rule','similarity']]=data['vendor'].apply(lambda row:[r[0],ratio(row[0],r[0])])
arg:
data['vendor'].apply(lambda row: rules['rule'].apply(lambda x: ratio(x, row))
<强>更新强>
看看你正在做什么,你需要计算每个规则对每个供应商的levenshtein比率。
您可以通过以下方式执行此操作:
var listprocedures = Ix.GetConnection
.Query(@"SELECT PROCNAME FROM SYSPROCEDURES WHERE PROCNAME LIKE 'web_%'")
.ToList();
foreach (var procName in listprocedures)
我认为应该根据每条规则计算每个供应商的比率。