【问题标题】:How do I instantiate a class?如何实例化一个类?
【发布时间】:2021-10-13 21:08:27
【问题描述】:

我目前正在尝试运行此解决方案,但我无法理解此处实际发生的情况。我得到的错误是:

line 39, in <module>
    map_manufacturer_model()
TypeError: map_manufacturer_model() missing 1 required positional argument: 's'

通过在线阅读文档意味着我需要在调用之前实例化一个对象?但我仍然不确定这意味着什么。我有我的数据框,我正在尝试遍历内部的所有内容以获得正确的制造商和仪表模型?关于这个问题的任何指导都会非常有用!

测试 csv:https://docs.google.com/spreadsheets/d/1nxLO7c2veCJOHp7Uw_3ZuUtYUvvMHtelEE-UW9QpY9g/edit#gid=0

gas_data = pd.read_csv(r'C:\Users\test.csv')

manufacturers = {'G4F0': 'FLN', 'G4K0': 'HWL', 'E6S1': 'LPG'}

meter_models = {'G4F0': {'1': 'G4SZV-1', '2': 'G4SZV-2'},
                'G4K0': {'': 'BK-G4E'},
                'E6S1': {'': 'G470'},
                }

def map_manufacturer_model(s):
    s = str(s)
    model = 'unknown'
    try:
        manufacturer = manufacturers[s[:4]]
        for k, m in meter_models[s[:4]].items():
            if s[-4:].startswith(k):
                model = m
                break
    except KeyError:
        manufacturer = 'unknown'

    return pd.Series({'New Meter Manufacturer': manufacturer,
                      'New Meter Model': model
                      })


gas_data[['New Meter Manufacturer', 'New Meter Model']] = gas_data['New Serial Number'].apply(
    map_manufacturer_model)


map_manufacturer_model()

【问题讨论】:

  • 问题出在最后一行,你怎么又调用方法了?
  • 通过在线阅读文档意味着我需要在调用之前实例化一个对象?仅当您调用的是类方法而不是普通函数时。
  • 除了@Barmar 所说的,你的函数还接受了一个你没有传递给它的字符串参数。

标签: python python-3.x pandas


【解决方案1】:

这与实例化对象无关。很明显,您误解了解决方案在这里的工作原理。

您将一个名为map_manufacturer_model函数 对象(不是类名)作为参数传递给.apply(..),因此后者可以在库的函数实现中调用map_manufacturer_model .所以你不应该打电话给map_manufacturer_model

所以删除最后一行。

【讨论】:

    【解决方案2】:

    问题是因为我再次回调该函数,即使它已经在 apply(map_manufacturer_model) 中被回调

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-16
      • 2017-06-09
      • 2014-01-03
      相关资源
      最近更新 更多