代码之家  ›  专栏  ›  技术社区  ›  user3088202

python函数传递参数

  •  1
  • user3088202  · 技术社区  · 6 年前

    我正在尝试编写一个简单的函数,它将为我提供pandas df中特定列中唯一值的计数。我想使用列名作为函数参数。但是,参数在函数内不能被识别为字符串。

    下面是我要转换为函数的内容 Cy-型 是一个 列名称 .

    c_type_count = data.groupby('c_type').c_type.count()
    

    这是函数。我使用参数列传递列名:

    def uniques(column):
        count = data.groupby(column).column.count()
        print(count)
    

    这个 GroupBy(列) 零件作为缩进工作,但第二个参考 保持为.column,我得到一个错误,因为df中没有该名称的列。

    我知道那里发生了什么,但是由于我对python不太熟悉,所以我不一定知道该由谁来转换语法。

    2 回复  |  直到 6 年前
        1
  •  2
  •   sacuL    6 年前

    我想你只是在找 value_counts()

    data['c_type'].value_counts()
    

    给出你所描述的你想要的。

    例子 :

    >>> data
      b_type c_type
    0      d      b
    1      d      a
    2      d      a
    3      c      a
    4      c      a
    5      d      b
    6      c      a
    7      d      b
    8      c      b
    9      c      a
    
    >>> data['c_type'].value_counts()
    a    6
    b    4
    

    如何修复自定义功能

    如果要继续使用自定义函数,只需使用标准索引而不是属性索引,换句话说,使用方括号而不是点标记来访问列。查看 documentation on indexing 了解更多信息

    def uniques(column):
        count = data.groupby(column)[column].count()
        # Alternatively:
        # count = data.groupby(column).size()
        print(count)
    

    这可以按您的需要工作:

    >>> uniques('c_type')
    c_type
    a    6
    b    4
    
        2
  •  1
  •   Dalvenjia    6 年前

    这是按设计的,在您的示例中,您调用 column 方法的groupby对象中,python从不在当前作用域中查找列值。 您需要的是内置功能 getattr() 它将通过字符串名称获取对象属性/方法。

    def uniques(column):
        count = getattr(data.groupby(column), column).count()
        print(count)