遍历数据帧,编写字典并将浮点值附加到键

时间:2020-10-22 16:08:11

标签: python pandas dictionary

我有超过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)

我需要帮助将浮点数从副本号追加到字典中,并检查键是否对应。

谢谢!

2 个答案:

答案 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])