У меня есть каталог с> 200 файлами с разделителями табуляции и той же структурой (столбцы #, заголовки столбцов)
+------+--------------+-------+-------+-----------+------+---------+
| col1 | col2 | col2 | col3 | p_val_adj | col4 | gene |
+------+--------------+-------+-------+-----------+------+---------+
| 0 | 1.980029448 | 0.978 | 0.124 | 0 | 0 | TRDV2 |
| 0 | 1.812616859 | 0.979 | 0.176 | 0 | 0 | TRGV9 |
| 0 | 1.442023797 | 0.688 | 0.09 | 0 | 0 | TRDC |
| 0 | -1.834847304 | 0.021 | 0.735 | 0 | 0 | TRAV1-2 |
+------+--------------+-------+-------+-----------+------+---------+
Моя цель - создать выходной файл, который содержит «ген» первым столбец и объединить все данные столбца "avg_logF C" из всех файлов. Для непересекающихся генов оставьте значение пустым.
Шаги, которые необходимо сделать: 1) прочитать все файлы в каталоге, заканчивающиеся на .txt [done] ex: File1.txt, File2.txt, File3.txt 2) использовать столбец "gene" в качестве index_col [done] 3) объединить файлы в один фрейм данных [ошибка] 4) заголовок столбца вместо avg_logF C должен отражать имя файла
Вот что я сделал до сих пор:
args = parse_args()
path=os.getcwd() #opens the path
allFiles = glob.glob(path + "/*.txt") #reads all files in the path with .txt
result = pd.read_csv(allFiles[0], sep="\t", index_col=["gene"]) #index by gene
for i in range(1,len(allFiles)): #iterates over remaining files; note first file is 0.
print i
df = pd.read_csv(allFiles[i], sep="\t", index_col=["gene"])
result = pd.merge(result, df, right_index=False, left_index=True, how='inner')
result.to_csv(args.output+".xls", sep="\t", na_rep="")
Я не могу получить желаемый результат, который проиллюстрирован ниже.
+----------+-------+-------+--------+
| genes | File1 | File2 | File 3 |
+----------+-------+-------+--------+
| TRDV2 | 0.5 | 12 | 2 |
| TRGV9 | 2 | 2 | |
| TRDC | -2 | 3 | 1 |
| TRAV1-2 | | 21 | -5 |
| CD8A | 0.24 | | -2 |
| TRBV20-1 | 3 | 1 | -2 |
| TRBC1 | 0.2 | | 3 |
| FCGR3A | 1 | 2 | 4 |
+----------+-------+-------+--------+