pandas Dataframe 列的装箱错误- KeyError:[列]中没有任何[浮点64索引([61.5,59.8,56.8.... d类型=“浮点64”,长度=53940)]

2izufjch  于 2023-02-14  发布在  其他
关注(0)|答案(1)|浏览(132)

我编写了一个函数,用于对 Dataframe 列的数值进行分箱,即将列值划分为指定数量的类别。

def binning_fun(df, col_name, num_of_bins):
    lt=[]
    for i in range(0,num_of_bins):
        lt.append(i)
        df[col_name]=pd.cut(df[col_name],bins=i+1, labels=lt)
    return df

df="C:/Users/shootings.csv"
binning_fun(df, df['depth'], 4)

这会产生以下错误:

  • "无[浮点64索引([61.5、59.8、56.9、62.4、63.3、62.8、62.3、61.9、65.1、59.4,\n ...\n 60.5、59.8、60.5、61.2、62.7、60.8、63.1、62.8、61.0、62.2],\n数据类型="浮点型64",长度= 53940)]位于[列]中"*

这些值确实存在于列"depth"中。为什么它们被称为不存在?
我的数据集:

carat   cut     clarity  depth  table   
0       0.23    Ideal       SI2  61.5   55.0    
1       0.21    Premium     SI1  59.8   61.0    
2       0.23    Good        VS1  56.9   65.0    
3       0.29    Premium     VS2  62.4   58.0    
4       0.31    Good        SI2  63.3   58.0    
5       0.24    Good        VVS2 90.7   62.8

预期产出:

depth
1
0
0
1
1
2
fdbelqdn

fdbelqdn1#

您可以将cut用于固定的bin大小:

def binning_fun(df, col_name, num_of_bins):
    df[col_name]=pd.cut(df[col_name], bins=num_of_bins, labels=range(num_of_bins))
    return df

df = pd.read_csv("C:/Users/shootings.csv")
binning_fun(df, 'depth', 4)

输出:

carat   cut     clarity  depth   table
0   0.23    Ideal   SI2      0       55.00
1   0.21    Premium SI1      0       61.00
2   0.23    Good    VS1      0       65.00
3   0.29    Premium VS2      0       58.00
4   0.31    Good    SI2      0       58.00
5   0.24    Good    VVS2     3       62.80

或者使用qcut表示大小相等的存储桶:

def binning_fun(df, col_name, num_of_bins):
    df[col_name]=pd.qcut(df[col_name], q=num_of_bins, labels=range(num_of_bins))
    return df

df=pd.read_csv("C:/Users/shootings.csv")
binning_fun(df, 'depth', 4)

输出:

carat   cut     clarity depth   table
0   0.23    Ideal   SI2     1       55.00
1   0.21    Premium SI1     0       61.00
2   0.23    Good    VS1     0       65.00
3   0.29    Premium VS2     2       58.00
4   0.31    Good    SI2     3       58.00
5   0.24    Good    VVS2    3       62.80

希望这能帮上忙。

相关问题