Обновление строк в указанном столбце c в CSV-файле (Python) - PullRequest
0 голосов
/ 26 марта 2020

Я сейчас работаю с очень большим CSV-файлом. Я хочу обновить только пустые строки в первом столбце. Я хочу l oop через каждую строку и обновить каждую строку (в столбце 1) со значением предыдущего столбца.

ДЛЯ ПРИМЕРА: Как видно из первого столбца, первая строка (исключая заголовок) - migrations, я хочу, чтобы в двух пустых строках ниже также отображалось migrations. Затем есть oauth_token_scopes, я хочу, чтобы пустые строки после него были заполнены oauth_token_scopes. Если это возможно, я был бы очень признателен за помощь!

CSV FILE

Ответы [ 2 ]

0 голосов
/ 26 марта 2020

Во-первых, прочтите CSV в 2D-список в Python. Затем l oop через столбец, который вы хотите редактировать, и сохраните в памяти значение последней заполненной ячейки, вставляя это значение во все пустые строки, пока не достигнете новой ячейки со значением.

Что-то как это:

csv_list = [["Stuff", "  ", "", "", "Other Stuff", "", "", "Final"], ["whatever", "x", 
"    ", "   ", "", "     ", "", ""]] # Here we are assuming that columns are the primary index
print("List before filling in blanks: ", csv_list)
prev_val = csv_list[0][0] # Assume first cell is not blank
for i in range(len(csv_list[0]) - 1): # Loop through first column
    if csv_list[0][i].strip() == "": # Check if cell is empty
        csv_list[0][i] = prev_val # Fill in cell if empty
    else:
        prev_val = csv_list[0][i] # Set new prev_val if cell is not empty
print("After: ", csv_list)

Что печатает:

List before filling in blanks:  [['Stuff', '  ', '', '', 'Other Stuff', '', '', 'Final'],
                                 ['whatever', 'x', '    ', '   ', '', '     ', '', '']]
After:  [['Stuff', 'Stuff', 'Stuff', 'Stuff', 'Other Stuff', 'Other Stuff', 'Other Stuff', 'Final'], 
         ['whatever', 'x', '    ', '   ', '', '     ', '', '']]
0 голосов
/ 26 марта 2020

Вы можете импортировать CSV в pandas фрейм данных, используя pd.read_csv(filename), а затем использовать pandas fillna. Пример ниже:

import pandas as pd

df = pd.DataFrame({"TableNames": ["migrations", None, None, "oauth_access_token_scopes", None, None, None],
                   "HeaderNames": [None, "migration", "batch", None, "id", "access_token_id", "scope_id"],
                  })
df["TableNames"] = df["TableNames"].fillna(method="ffill")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...