更改熊猫列中的类别?

时间:2018-09-13 09:31:05

标签: python pandas for-loop iterator iteration

我正在对熊猫进行iter函数的实验。

1-我从pandas列中列出了一个清单。

  

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
...     ....

正如我所说,我正在实验,我看不出in_2处的for循环为什么不起作用的任何原因。

1 个答案:

答案 0 :(得分:1)

主要问题是赋值需要=,而不是相等运算符==

由于循环内的变量i是标量,而不是指向原始列表中元素的引用,因此您被迫追加到新列表中。相反,您可以使用enumerate并修改现有列表:

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

或者,更像Python一样,使用列表理解:

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