【问题标题】:Dataframe apply doesn't accept axis argument数据框应用不接受轴参数
【发布时间】:2018-02-03 08:18:00
【问题描述】:

我有两个数据框:datarules

>>>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'

有人可以帮我弄清楚我做错了什么吗?我所做的任何更改都只会产生新的错误。谢谢

【问题讨论】:

    标签: python pandas dataframe apply


    【解决方案1】:

    您正在调用applySeries 版本,因此使用axis arg 没有意义,因此会出现错误。

    如果你这样做了:

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

    然后这会生成一个可以使用的单列 df

    或者只是删除axis arg:

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

    更新

    看看你在做什么,你需要针对每个供应商计算每个规则的 levenshtein 比率。

    您可以这样做:

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

    我认为这应该根据每个规则计算每个供应商的比率。

    【讨论】:

      猜你喜欢
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 2022-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-30
      • 2012-10-08
      相关资源
      最近更新 更多