Python Value_counts()属性错误:';str';对象没有属性';价值单位计数';

Python Value_counts()属性错误:';str';对象没有属性';价值单位计数';,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,我正在运行下面的代码,以满足概述的对象,但得到一个错误,我不知道如何修复 class variableTreatment(): def drop_zero_car_col(self, df): numerical = list(df._get_numeric_data().columns) categorical = list(set(df.columns).difference(set(numerical)))

我正在运行下面的代码,以满足概述的对象,但得到一个错误,我不知道如何修复

class variableTreatment():
         def drop_zero_car_col(self, df):
            numerical = list(df._get_numeric_data().columns)
            categorical = list(set(df.columns).difference(set(numerical)))
            ls = []
            for i in categorical:
                d = dict(i.value_counts())
                if len(d)==1:
                    ls.append(i)
            df.drop(ls,axis=1,inplace=True)
            return(df)

import pandas as pd
import numpy as np
from sklearn.preprocessing import MinMaxScaler,StandardScaler,LabelEncoder
df = pd.read_excel('CKD.xlsx')

VT = variableTreatment()

VT

VT.drop_zero_car_col(df).head()
要执行此操作,请执行以下操作: 删除具有相同级别的分类列,例如具有所有“是”值的列

投入: 1.数据帧df:Dataframe

产出: 1.带删除列的数据帧df(如果未删除任何列,则返回相同的数据帧)

但我得到了一个错误:

AttributeError                            Traceback (most recent call last)
<ipython-input-10-e04a1da339fd> in <module>
----> 1 VT.drop_zero_car_col(df).head()

<ipython-input-3-64cf5361fc06> in drop_zero_car_col(self, df)
     54         ls = []
     55         for i in categorical:
---> 56             d = dict(i.value_counts())
     57             if len(d)==1:
     58                 ls.append(i)

AttributeError: 'str' object has no attribute 'value_counts'```

AttributeError回溯(最近一次调用)
在里面
---->1垂直下降零点轿厢立柱(df)头部()
落车零车列(自,df)
54 ls=[]
55对于i,分类:
--->56 d=dict(i.值_计数())
57如果len(d)==1:
58.附加(i)
AttributeError:“str”对象没有属性“value\u counts”```

要在dataframe中删除具有相同值的非数字列,您可以更改函数,如下所示:

class variableTreatment():
         def drop_zero_car_col(self, df):
            # selecting numerical columns without accessing private method
            numerical = list(df.select_dtypes([np.number]).columns)
            categorical = list(set(df.columns).difference(set(numerical)))
            # after above line categorical will have only non numeric columns
            ls = []
            for i in categorical:
                # value_counts will return series containing count of non unique values 
                d = df[i].value_counts()    
                # if series length is 1 then it means there is only one value in column that is duplicated across all rows so this columns should be dopped                
                if len(d)==1:
                    ls.append(i)
            df.drop(ls,axis=1,inplace=True)
            return(df)

为什么在Strings上使用series value_counts方法这里的类的用途是什么?我看到很多奇怪的操作,你能分享更多的代码和数据吗?看:。卡皮尔-一个朋友在帮助我,当我们研究时,我们认为这是正确的方法。你建议怎么做?Alexander-该类下还有一系列与该函数无关的其他函数。这门课也代表VT。我明天第一件事就可以发布数据