Почему мой цикл for перезаписывает переменную вместо добавления? - PullRequest
0 голосов
/ 06 ноября 2019

Я пытаюсь преобразовать несколько столбцов из числа с плавающей точкой в ​​строковый тип из кадра данных.

У меня есть нижеприведенный кадр данных:

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]})

Я пытаюсь преобразовать столбец "CountA" и"CountB" в строку с использованием цикла for:

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 ]

2 голосов
/ 06 ноября 2019

В вашем цикле вы меняете их местами дважды. В первый раз он делает правильную замену. Вторая итерация переключает их.

Используйте это вместо:

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

Или более простой вариант:

df[["CountA","CountB"]] = df[["CountA","CountB"]].astype(str)
1 голос
/ 06 ноября 2019

Если все, что вам нужно, это изменить тип данных столбцов с int на string, почему бы просто не сделать следующее:

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