无法访问在while循环中创建的数据框列

时间:2019-02-20 22:31:49

标签: python pandas

python / pandas的新手,在循环中创建新列时遇到问题。 我想在循环的每次迭代中创建一个新列,并根据数据帧中的其他三个值是否都等于1来填充1(是)或0(是否)。在总共45列中进行了15次操作,并从循环中产生了15个新列,分别标记为'newCol'+一个数字(从0到14)。

我想在每次迭代循环时创建一个新列,并用订单号(在循环中运行时x的值)标记它,以便我可以跟踪检查了哪些列。

x = 0
label = 'newColumn',x
while x < 15:
    label = 'newCol',x
    #creates a new column with label that includes x
    #populates with 1 or 0
    df.loc[label] = np.where((df.iloc[:,x] == 1) & (df.iloc[:,x] == df.iloc[:,x+15]) & (df.iloc[:,x] == df.iloc[:,x+30]), 1, 0)
    #increment x
    x = x+1

如果我使用.info()查看它们,最终将产生这些列,但是我无法通过向前的任何索引访问它们。

我们非常感谢您的帮助!! 谢谢

2 个答案:

答案 0 :(得分:1)

.loc属性,用于进行索引/切片以及可能使用布尔索引来更改先前存在的值。如果您想创建一个新列,建议这样做:

x = 0
label = 'newColumn',x
while x < 15:
    label = 'newCol',x
    #creates a new column with label that includes x
    #populates with 1 or 0

# do this instead
    df[label] = np.where((df.iloc[:,x] == 1) & (df.iloc[:,x] == df.iloc[:,x+15]) & (df.iloc[:,x] == df.iloc[:,x+30]), 1, 0)
    #increment x
    x = x+1

您原来的方法实际上是向行而不是列添加索引。为避免这种情况,您可以使用上述方法。

@ alex-chojnacki提到的下一步是,您的label是一个元组而不是字符串,这可能会使在代码中引用变得困难。

答案 1 :(得分:0)

我认为您遇到的问题是label = 'newColum',x实际上不是返回字符串,而是返回一个元组。因此,您用来索引到df的label的值实际上是第一次迭代时的("newCol", 0)

如果您改为将标签创建为字符串而不是元组,则应该可以。一种实现此目的的方法是label = "newCol" + str(x)