连接几个变量在迭代内不起作用,并且在迭代之外工作

时间:2017-06-11 07:34:23

标签: python python-3.x pandas concatenation

我试图连接几个变量并计算总和,因为我想做多个操作,我正在迭代已经保存在df.cols中的所有可能的变量组合,但是我得到了关键错误。

for i in df.cols[0:20]: 
    k+=1
    name = "cat" + str(k)
    df1[name] = df1.loc[:, i].sum(axis = 1)

它给出了KeyError,尽管它在列中。

KeyError: "the label [['D120_1', 'Y69_0', 'K189_0']] is not in the [columns]"

例如,当我尝试打印i时:

print(i)
['D120_1', 'Y69_0', 'K189_0']

当我在没有迭代的情况下尝试使用['D120_1','Y69_0','K189_0']替换i时,效果很好。为什么它会识别迭代内部的关键,并且在迭代之外无法识别它。

虽然与迭代中的内容相同,但效果很好。

df1["col1"] = df1.loc[:, ['D120_1', 'Y69_0', 'K189_0']].sum(axis = 1)

但这不起作用:

df1["col1"] = df1.loc[:, i].sum(axis = 1)

2 个答案:

答案 0 :(得分:0)

如果在Pandas中正确记住,切片中都包含start和stop索引,而不是Python跳过最后一个索引的方式。看看这是否是您的问题的根源 - 您可能正在迭代到不可用的索引(标签)。

答案 1 :(得分:0)

实际上,我发现列表保存为字符串“['D120_1','Y69_0','K189_0']”

要解决我使用ast.literal_eval

的问题
from ast import literal_eval
i = literal_eval(i)
print(i)
['D120_1', 'Y69_0', 'K189_0']