我有超过6k个数据帧,看起来像这样,gene_id在所有文件中保持不变,但不是copy_number:
gene_id copy_number
ENSG00000223972.5 NaN
ENSG00000227232.5 NaN
ENSG00000278267.1 NaN
ENSG00000243485.3 NaN
ENSG00000274890.1 NaN
ENSG00000237613.2 NaN
ENSG00000268020.3 NaN
ENSG00000240361.1 1.0
ENSG00000186092.4 1.0
ENSG00000238009.5 1.0
我的想法是遍历所有文件,从第一个文件创建字典,然后在循环浏览其他文件时,添加与gene_id相对应的副本号:
{'ENSG00000223972.5': nan,
'ENSG00000227232.5': nan,
'ENSG00000278267.1': nan,
'ENSG00000243485.3': nan,
'ENSG00000274890.1': nan,
'ENSG00000237613.2': nan,
'ENSG00000268020.3': nan,
'ENSG00000240361.1': 1.0,
'ENSG00000186092.4': 1.0,
'ENSG00000238009.5': 1.0}
第二个文件:
gene_id copy_number
ENSG00000223972.5 3.0
ENSG00000227232.5 3.0
ENSG00000278267.1 3.0
ENSG00000243485.3 2.0
ENSG00000274890.1 2.0
ENSG00000237613.2 2.0
ENSG00000268020.3 2.0
ENSG00000240361.1 1.0
ENSG00000186092.4 1.0
ENSG00000238009.5 1.0
最终结果提示:
{'ENSG00000223972.5': nan, 3.0,
'ENSG00000227232.5': nan, 3.0,
'ENSG00000278267.1': nan, 3.0,
'ENSG00000243485.3': nan, 2.0,
'ENSG00000274890.1': nan, 2.0,
'ENSG00000237613.2': nan, 2.0,
'ENSG00000268020.3': nan, 2.0,
'ENSG00000240361.1': 1.0, 1.0,
'ENSG00000186092.4': 1.0, 1.0,
'ENSG00000238009.5': 1.0, 1.0}
我的代码:
df1 = pd.read_csv('/Users/file1.tsv', sep = '\t')
dict1 = df1.to_dict()
#Iterate through all the files in folder:
genelevelpath = '/Users/user/myfiles/'
allfiles = glob.glob(genelevelpath + '/*.tsv')
for filename in allfiles:
pd.read(file)
我需要帮助将浮点数从副本号追加到字典中,并检查键是否对应。
谢谢!
答案 0 :(得分:1)
import pandas as pd
from glob import glob
genelevelpath = '/Users/user/myfiles/'
all_files = glob.glob(genelevelpath + '/*.tsv')
df = pd.concat((pd.read_csv(f, sep='\t') for f in all_files))
df.groupby('gene_id')['copy_number'].apply(list)
答案 1 :(得分:0)
第一个字典中的所有值中的第一个应该是列表(to_dict应该自动执行此操作)
{'ENSG00000223972.5': [nan],
'ENSG00000227232.5': [nan],
'ENSG00000278267.1': [nan],
'ENSG00000243485.3': [nan],
'ENSG00000274890.1': [nan],
'ENSG00000237613.2': [nan],
'ENSG00000268020.3': [nan],
'ENSG00000240361.1': [1.0],
'ENSG00000186092.4': [1.0],
'ENSG00000238009.5': [1.0]}
然后尝试这样:
for x,y in zip(list(firstDict.keys()),list(secondDict.keys())):
firstDict[x].append(secondDict[y])