Объединение файлов .mtx и изменение счетчика для идентификаторов ячеек - PullRequest
0 голосов
/ 03 апреля 2020

У меня есть несколько файлов, которые выглядят следующим образом, где в заголовке указано количество уникальных значений для каждого столбца.

enter image description here

Как прочитать несколько из этих файлов и объединить их все в один ?? Когда я конкатенирую, мне нужно, чтобы все значения в столбце в середине ДОБАВЛЯЛИ общее значение счетчика этого столбца из файла ранее, чтобы продолжить подсчет при конкатенации. Другие два столбца, я не возражаю.

Моя попытка:

matrixFiles = glob.glob(filesPath +'/*matrix.mtx')

dfs = []

i = 0

for file in sorted(matrixFiles):

    matrix = pd.read_csv(file, sep = ' ')
    cellNumber = matrix.columns[1]
    cellNumberInt = np.int64(cellNumber)

    if i > 0:

        matrix.iloc[:,1] = matrix.iloc[:,1] + cellNumberInt

    dfs.append(matrix)


    i = i + 1

big_file = pd.concat (dfs)

Я не знаю, как получить доступ к cellNumberInt из итерированного файла, прежде чем добавить его в новый. .

Когда я конкатат dfs, выходные данные не являются три столбца данных. Как я могу объединить все файлы в тех же столбцах и избежать заголовка?

1 Ответ

1 голос
/ 03 апреля 2020
1.csv:
33694,1298,2465341
33665,1299,20
33663,1299,8

2.csv:
53694,1398,3465341
33665,1399,20
33663,1399,8

3.csv:
13694,7778,3465341
44432,7780,20
33663,7780,8

import pandas as pd
import numpy as np

matrixFiles = ['1.csv', '2.csv', '3.csv']

dfs = []
matrix_list = []
#this dict stores the i number (keys) and the cellNumberInt (values)
cellNumberInt_dict = {}

i = 0

for file in sorted(matrixFiles):

    matrix = pd.read_csv(file)
    cellNumber = matrix.columns[1]
    cellNumberInt = np.int64(cellNumber)

    cellNumberInt_dict[i] = cellNumberInt

    if i > 0:  
        matrix.rename(columns={str(cellNumberInt) : cellNumberInt + cellNumberInt_dict[i-1]}, inplace=True)

        dfs.append(matrix)

    if i < len(matrixFiles)-1:
        #we only want to keep the df values here, keeping the columns that don't
        # have shared names messes up the pd.concat()
        matrix_list.append(matrix.values)

    i += 1
# get the last df in the dfs list because it has the last cellNumberInt
last_df = dfs[-1]

#concat all of the values from the dfs except for the last one
arrs = np.concatenate(matrix_list)

#make a df from the numpy arrays
new_df = pd.DataFrame(arrs, columns=last_df.columns.tolist())

big_file = pd.concat([last_df, new_df])
big_file.rename(columns={big_file.columns.tolist()[1] : sum(cellNumberInt_dict.values())}, inplace=True)
print (big_file)



13694   10474   3465341
0   44432   7780    20
1   33663   7780    8
0   33665   1299    20
1   33663   1299    8
2   33665   1399    20
3   33663   1399    8
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...