错误循环通过列名称熊猫

时间:2021-02-19 02:08:06

标签: python pandas loops

所以,我有一个 df,其中一个问题在不同的列中得到回答:

          Main activity at work     Main activity at work .1    Main activity at work .2 ... Main activity at work .20
            
     0       machine operator             administrator                           null            cleaning
     1              null                       null                              accountant       cleaning 
     2           machine operator              null                                null           null
     3              null                  administrator                            null           cleaning       

等等。每列只有一种类型的答案,适用于它。

现在,事情很简单,我想一次对所有列执行 value_counts()。所以我想要的输出是:

main activity at work   
machine operator 20

main activity at work .1
administrator  14

main activity at work .2
accountant    10

等等。我的问题是列名。我使用了这个代码:

activity = pd.Series('Main activity at work  .'+ pd.Series(np.arange(1,21)).map(str))

for num in activity:

    print(df['activity'].value_counts(), '\n')

但我收到此错误消息:

KeyError: 'activity'

错误是什么,或者有没有更好的方法来做?

编辑:“工作中的主要活动”、“工作中的主要活动 .1”等是列名称,因此我没有所有这些名称的名称。这就是我的循环最初代表的意思。

2 个答案:

答案 0 :(得分:0)

您正在调用 df['activity'],这意味着您需要“活动”列。当你用引号写一些东西时,它是一个字符串而不是一个变量。所以这是行不通的。我没有测试它,但如果你想有机会必须写一些类似 df[num] 的东西。但即使这应该在这里工作,也是一种更实用的方法:使用 itmes() 方法遍历列。

df = pd.DataFrame({'species': ['bear', 'bear', 'marsupial'],
                       'population': [1864, 22000, 80000]},
                      )
dict = {}
for label, content in df.items():
    series = content.value_counts()
    dict[label] = series  
    print(series)

为了多一点理解。变量标签是列名,内容是它的内容,作为熊猫系列。我不知道你是否只需要打印输出,所以我额外使用了一个字典来存储输出。

答案 1 :(得分:0)

您可以融合数据并对其执行 value_counts:

activity_counts= (df.melt(var_name="question", value_name="activity")
                    .value_counts()
                    .reindex(df.columns, level=0)) # preserve the order of question ids

print(activity_counts)
question                   activity
Main activity at work      machine operator    2
Main activity at work .1   administrator       2
Main activity at work .2   accountant          1
Main activity at work .20  cleaning            3
dtype: int64

activity_counts 是一个带有 pd.Series 键的 pd.MultiIndex。如果此对象令人困惑,您可以使用 .reset_index() 将其变成更熟悉的 pd.DataFrame 表示