gpt4 book ai didi

带有自定义聚合函数和 dtype 条件的 pandas agg : column disappears silently

转载 作者:行者123 更新时间:2023-12-04 07:51:53 27 4
gpt4 key购买 nike

我想对 Pandas 数据框进行分组和聚合。
我有一个自定义聚合函数,它应该根据它所应用的系列的 dtype 做不同的事情。
然而,一些列默默地消失了。它似乎与 dtype 条件有关。
在制作可复制示例的过程中,我注意到了一些奇怪的事情:

  • 如果我测试该系列是否为 dtype string首先,然后使用 else对于其他情况的声明,我的数字列被默默删除
  • 但是,如果我测试 series.dtype == "int64"首先,它按预期工作。

  • 这是我的可复制示例:
    import pandas as pd

    # reprex dataframe
    groups = ["group1", "group1", "group2", "group2"]
    numbers = [1, 2, 3, 4]
    letters = ["a", "b", "c", "c"]
    data = {"group": groups, "number": numbers, "letter": letters}
    df = pd.DataFrame(data)
    df["letter"] = df["letter"].astype("string")

    # custom aggregation functions
    def is_int(series):
    if series.dtype == "int64":
    return "int64"
    else:
    return "not an int"

    def is_string(series):
    if series.dtype == "string":
    return "string"
    else:
    return "not a string"

    # the confusing part
    df.groupby("group").agg(is_int) # works as expected
    df.groupby("group").agg(is_string) # the "number" column disappears silently
    欢迎任何有关为什么会发生这种情况以及如何处理它的见解!

    最佳答案

    new Dtypes是实验性的,因此总是有奇怪的怪癖。问题是,虽然字符串 dtypes 与 'string' 的比较它对任何其他 dtype 都失败是有道理的。

    df['letter'].dtype == 'string'
    # True

    df['number'].dtype == 'string'
    #TypeError: data type 'string' not understood
    因此 groupby 会默默地忽略第二种情况下的错误并且不显示输出,因为它无法聚合该列。正确的比较是与实际的字符串 Dtype: pd.StringDtype ,并使用 isinstance
    def is_string(series):
    if isinstance(series.dtype, pd.StringDtype):
    return "string"
    else:
    return "not a string"

    df.groupby("group").agg(is_string)
    # number letter
    #group
    #group1 not a string string
    #group2 not a string string

    关于带有自定义聚合函数和 dtype 条件的 pandas agg : column disappears silently,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66922659/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com