Менять категории в колонне панд? - PullRequest
0 голосов
/ 13 сентября 2018

Я экспериментировал с функцией iter на пандах.

1 - я сделал список из столбца панд.

in1:

df_area_code_iter = iter(df["Area Code"])
df_area_code_iter_list = list(df_area_code_iter)
df_area_code_iter_list

out_1:

['Area 1',
 'Area 2',
 'Area 1',
 ...
 'Area 0']

2- Затем я хотел пройтись по элементам списка, чтобы заменить область 0 ПРОЙДЕНОМ.

in_2:

new_column = []

for i in df_area_code_iter_list:
    if i == "Area 0":
       i == "PASS THIS"
    new_column.append(i)

new_column

out_2:

['Area 1',
 'Area 2',
 'Area 1',
 ...
 'Area 0']

Я знаю, что существуют другие методы для замены значений в столбце.Однако я хочу выяснить это путем преобразования кадра данных в список и последующей итерации по элементам.

in_3:

df["Area Code"] = df["Area Code"].replace(to_replace ="Area 0", value = 
"PASS THIS")
df["Area Code"]

out_3:

0          Area 1
1          Area 2
2          Area 1
3          Area 1
4       PASS THIS
5       PASS THIS
6       PASS THIS
...     ....

Как я уже сказал, я экспериментирую и не вижу причин, почему цикл for в in_2 не работает.

1 Ответ

0 голосов
/ 13 сентября 2018

Основная проблема в присвоении требует =, а не оператор равенства ==.

Вы вынуждены добавлять новый список, так как переменная i внутри цикла является скалярной, а нессылка, указывающая на элемент в вашем исходном списке.Вместо этого вы можете использовать enumerate и изменить свой существующий список:

for idx, val in enumerate(df_area_code_iter_list):
    if val == "Area 0":
        df_area_code_iter_list[idx] = "PASS THIS"

Или, более Pythonic, использовать понимание списка:

new_list = [x if x != 'Area 0' else 'PASS THIS' for x in df_area_code_iter_list]
...