KeyError:'col''发生在索引col'在应用函数期间[重复]

Posted

技术标签:

【中文标题】KeyError:\'col\'\'发生在索引col\'在应用函数期间[重复]【英文标题】:KeyError: 'col' 'occured at index col' during apply function [duplicate]KeyError:'col''发生在索引col'在应用函数期间[重复] 【发布时间】:2018-11-05 16:40:18 【问题描述】:

我有以下数据集:

  target  |  date |  US_midi | UK_midi | NL_midi | BE_midi | FR_midi | SP_midi | PT_midi | SU_midi | COL_MIDI
    23       1970       1         0         0          0        0        0          0         0               0
    34       1970       0         0         1          0        0        0          0         0               0
    34       1970       0         1         1          0        0        0          0         0               0

目前COL_MIDI 的值设置为 0,但如果*_MIDI 列中的任何 列,US_midiSU_midi 除外,我想将其更改为 1变量设置为1

因此,在示例中,最后 2 行将获得 1 用于 COL_MIDI 变量

为此我写了如下函数:

def col_checker(x):
    col_list = ['UK_midi', 'NL_midi', 'BE_midi', 'FR_midi', 'SP_midi', 'PT_midi']
    for nation in col_list:
        if x[nation] != 0:
            x['COL_MIDI'] = 1

我使用以下命令运行:

df['COL_MIDI'] = df.apply(col_checker)

然而每次我遇到以下错误(并且值保持在 0)

('UK_midi', 'occurred at index target')

我尝试重置索引(无效)并检查了两个数据框,并将数据框保存为 csv 以进行检查 - 但无法检测到任何异常。所有列的长度和所有内容都相同,所以我不确定索引是如何弄乱的,也不知道为什么它会阻止我的脚本运行。

有人知道我做错了什么吗?

【问题讨论】:

您的df.apply( 中可能需要axis=1(未测试) 成功了!感谢您的答复!我通常不会对整个数据框使用“应用”函数,所以我没有想到使用轴。 【参考方案1】:

这是实现您想要的更简单的方法

col_list = ['UK_midi', 'NL_midi', 'BE_midi', 'FR_midi', 'SP_midi', 'PT_midi']
df['COL_MIDI'] = (df[col_list].sum(axis=1) > 0) * 1

【讨论】:

以上是关于KeyError:'col''发生在索引col'在应用函数期间[重复]的主要内容,如果未能解决你的问题,请参考以下文章

按索引选择行 - Pandas loc - 任何缺失的标签

如何在给定row和col索引的情况下获取Dojo Grid单元的实际DOM节点?

深入浅析Mysql联合索引最左匹配原则

索引的最左前缀原则

在公共索引上连接数据帧

联合索引最左匹配原则