我有一个dataframe,有两列,分别为gene_hgnc_id和embedding,现在我还有一个一维列表lis,里面的元素为gene_hgnc_id,写一个循环,遍历lis,将lis根据dataframe替换成embedding
时间: 2024-05-06 22:16:33 浏览: 94
可以尝试以下代码:
```python
import pandas as pd
# 假设数据框为df,列表为lis
lis = ['gene1', 'gene2', 'gene3']
df = pd.DataFrame({
'gene_hgnc_id': ['gene1', 'gene2', 'gene3', 'gene4'],
'embedding': [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
})
# 遍历lis,并替换成embedding
for i in range(len(lis)):
gene = lis[i]
embedding = df.loc[df['gene_hgnc_id'] == gene]['embedding'].values[0]
lis[i] = embedding
print(lis)
```
解释一下代码:
首先定义了一个假的数据框df和列表lis,其中每个基因有一个对应的embedding。接着遍历lis,对于每个基因,通过在数据框中找到对应的行,获取其embedding,并将lis对应的元素替换为embedding。最后输出替换后的lis。
需要注意的是,这个方法在lis中存在未在数据框中出现的基因时会报错。如果需要处理这种情况,可以在遍历时加入判断。
相关问题
我有一个dataframe,有两列,分别为gene_hgnc_id和embedding,现在我还有一个一维列表lis,里面的元素为gene_hgnc_id,如何将lis根据dataframe替换成embedding
你可以使用pandas库的merge函数,将两个DataFrame合并,然后根据lis中的gene_hgnc_id筛选embedding列,得到你想要的结果。
具体实现步骤如下:
1. 将lis转换成DataFrame格式
```python
import pandas as pd
lis_df = pd.DataFrame({'gene_hgnc_id': lis})
```
2. 使用merge函数将两个DataFrame合并
```python
merged_df = pd.merge(df, lis_df, on='gene_hgnc_id', how='inner')
```
这里的on参数表示根据gene_hgnc_id列进行合并,how参数表示使用内连接方式。
3. 筛选embedding列
```python
result = merged_df['embedding']
```
最终得到的result就是根据lis替换成的embedding列表。
阅读全文