迭代 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)
我和这个例子有类似的情况。 我有一个包含 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)