Как минимум, вы можете уменьшить индексирование, преобразование и операторы if до
val = str(csv_content[csv_content_row_idx][csv_content_column_idx]).lower()
if val in {'nan', 'n/a', 'na', 'null', ''}:
csv_content[csv_content_row_idx][csv_content_column_idx] = None
Но python хорош для эффективной перестройки списков, и понимание вложенных списков может быть быстрее.Это немного загадочно, но этот код перестраивает внешний список, отфильтровывая пустые строки со вторым пониманием списка, которое преобразует наноподобный текст в None.Обратите внимание, что эта функция возвращает новый отфильтрованный список, и вы можете удалить старый.
_none_synonyms = {'nan', 'n/a', 'na', 'null', ''}
def reformat_csv_data(csv_content):
return [ [ cell
if not isinstance(cell, str) or cell.lower() not in _none_synonyms
else None
for cell in row ]
for row in csv_content if row ]
Может быть, лучше выполнить эту фильтрацию, когда вы читаете данные.Поскольку этот код повторяет только исходный список списков, он может использовать итератор.Например, объект чтения CSV
with open('some.csv') as in_fp:
my_table = reformat_csv_data(csv.reader(in_fp))