为什么我的for循环会覆盖变量而不是附加变量?

时间:2019-11-06 03:18:41

标签: python for-loop

我试图将多列从float转换为数据帧中的字符串类型。

我在下面有一个数据框:

df = pd.DataFrame({'User':['101','102','103','104','105','106'],'CountA':[7,8,9,10,11,12],'CountB':[1,2,3,4,5,6],'CountC':[13,14,15,16,17,18]})

我正在尝试使用for循环将列“ CountA”和“ CountB”转换为字符串:

convert = (df["CountA"], df["CountB"])
col_name = ["CountA","CountB"]
for a in convert:
       for b in col_name:
           df[b] = a.astype(str)

使用for循环转换后,我的CountA值由CountB值替换,如下所示:

df = pd.DataFrame({'User':['101','102','103','104','105','106'],'CountA':[1,2,3,4,5,6],'CountB':[1,2,3,4,5,6],'CountC':[13,14,15,16,17,18]})

发生了什么事?

2 个答案:

答案 0 :(得分:2)

在您的循环中,您两次更改了他们的位置。第一次,它将进行正确的替换。第二次迭代将它们切换。

改用这个:

for a,b in zip(convert,col_name):
    df[b] = a.astype(str)

或更简单的选择是:

df[["CountA","CountB"]] = df[["CountA","CountB"]].astype(str)

答案 1 :(得分:1)

如果您要做的只是将列的数据类型从int更改为string,为什么不简单地执行以下操作:

col_name = ["CountA","CountB"]
for col in col_name:
    df[col] = df[col].astype('str')