迭代 df 并用字典替换值

Iterate over df and replace values with a dict

我和这个例子有类似的情况。 我有一个包含 5 行和 5 列的 pandas 数据框。

我在这个 df 中只有 0 和 1:

我有一个字典告诉我,例如第一列中的值为 'G' 如果它是 0 或 'A' 如果值为 1,就像这个:

 dict = {0: {'0': 'G', '1': 'A'},
     1: {'0': 'G', '1': 'A'},
     2: {'0': 'T', '1': 'A'},
     3: {'0': 'G', '1': 'A'},
     4: {'0': 'A', '1': 'C'},
     5: {'0': 'C', '1': 'A'}}

这是我的问题..我如何遍历行和列以用我的 df 上的字典值替换为 0、1?

前两行的预期结果:

| A | A | A | A | A | A |
|:--|:--|:--|:--|:--|--:|
| G | G | T | G | A | C |

您可以使用 replace:

>>> df.astype(str).replace(my_dict)

   0  1  2  3  4  5
0  A  A  A  A  A  A
1  G  G  T  G  A  C
2  G  G  T  G  A  C
3  G  G  T  G  A  A
4  A  A  A  A  A  C

顺便说一句,不要调用你的字典dict。我在示例中使用了 my_dict

你也可以这样做:

for i in range(6):
    df.iloc[:, i] = df.iloc[:, i].apply(lambda x: my_dict[i][str(x)])

因此您可以只定位您想要的列。

data = [[random.randint(0,1) for i in range(5)] for j in range(5)]
df = pd.DataFrame(data).astype(str)

mapper =  {0: {'0': 'G', '1': 'A'},
     1: {'0': 'G', '1': 'A'},
     2: {'0': 'T', '1': 'A'},
     3: {'0': 'G', '1': 'A'},
     4: {'0': 'A', '1': 'C'},
     5: {'0': 'C', '1': 'A'}}

def maps(row):
    transform = mapper[row.name]
    for i in range(len(row)):
        row[i] = transform[row[i]]
    return row

df.apply(maps, axis=1)