Получить непустую ячейку рекурсивно из предыдущих столбцов CSV с использованием Python - PullRequest
0 голосов
/ 27 января 2019

Я новичок в Python и переполнении стека.

Я извлекаю из CSV-файла несколько столбцов во временный CSV-файл и очищаю данные для удаления записей Nan. После того, как я их извлек, я заканчиваю двумя файлами CSV.

Основной файл CSV:

Сортировка, Родитель 1, Родитель 2, Родитель 3, Родитель 4, Родитель 5, Имя, Родитель 6

1, Джон ,,, Ned ,, Dave

2, Сэм, Майк ,,,, Ken

3 ,,, Пит ,,, Стив

4, Керри ,, Rachel ,, Роге

5 ,,, Лора Митчелл ,, Ким

Извлеченный CSV:

Имя, ParentNum

Дейв, Родитель 4

Кен, родитель 2

Стив, Родитель 3

Рог, Родитель 4

Ким, родитель 4

Что я пытаюсь сделать, так это то, что я хотел бы пройти через main csv, используя имя и родительский номер. Но если я напишу цикл for, он напечатает пустые строки, потому что он ищет каждую строку для первого значения. Что является лучшим подходом вместо цикла. Я пытался читатель словаря читать SCV, но не мог далеко уйти Любая помощь будет оценена.

КОД:

import xlrd
import csv
import pandas as pd

print('Opening and Reading the msl sheet from the xlsx file')
with xlrd.open_workbook('msl.xlsx') as wb:
    sh = wb.sheet_by_index(2)
    print("The sheet name is :", sh.name)
    with open(msl.csv, 'w', newline="") as f:
        c = csv.writer(f)
        print('Writing to the CSV file')
        for r in range(sh.nrows):
            c.writerow(sh.row_values(r))

df1 = pd.read_csv(msl.csv, index_col='Sort')
with open('dirty-processing.csv', 'w', newline="") as tbl_writer1:
    c2 = csv.writer(tbl_writer1)
    c2.writerow(['Name','Parent'])
    for list_item in first_row:
        for item in df1[list_item].unique():
            row_content = [item, list_item]
            c2.writerow(row_content)

Ожидаемый результат: Введите основной CSV:

введите описание изображения здесь

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

Ex: Negarnaviricota, Филюм Haploviricotina, Подтип ... и так далее

Следующее, что хотелось бы сделать, - это получить его родителя. Вот где я застрял. Кроме того, как вы видите, не все столбцы содержат данные, поэтому я хочу получить последний непустой столбец. До этого момента все выполнялось с использованием приведенного выше кода. Таким образом, пример вывода должен выглядеть следующим образом.

введите описание изображения здесь

...