Я написал небольшую программу на Python, которая записывает данные Excel в csv, у меня есть несколько пустых ячеек, которые преобразуются как nan в cvs.

Мне удалось преобразовать nan в ноль, но мое требование - доказать пустую строку вместо нуля для nan.

Я пытался использовать «заменить», но это не работает.

Вот мой код для записи данных

# Open th workbook
data = pd.read_excel(excelName, sheet_name, header=None).values


tables = dict()
for header, start_row, end_row in eval(config['headers']):
    
    table = data[start_row-1:end_row, 1:7]
    tables[header] = table
  
with open(join(CurrentDirectory, inputFile), 'w') as file:
    for header in tables:
        for row in tables[header]:
            row = [date, header] + row.tolist()
            row = [np.nan_to_num(x, 0) for x in row]
            file.write(",".join([str(x) for x in row]))
            file.write("\n")

Так вместо

with open(join(CurrentDirectory, inputFile), 'w') as file:
    for header in tables:
        for row in tables[header]:
            row = [date, header] + row.tolist()
            #row = [np.nan_to_num(x, 0) for x in row]
            row = [np.nan, '' , regex=True]
            file.write(",".join([str(x) for x in row]))
            file.write("\n")

Но я получаю сообщение об ошибке, может ли кто-нибудь помочь мне с тем, что я делаю не так?

ERROR: invalid syntax 

Вот как выглядит мой текущий CSV:

A, 2.4, 3212, 0, 343.2234,90
B, 1.4, 0 , 0 , 2839.09, 100

И вот как я этого хочу

A,2.4,3212,,343.2234,90
B,1.4,,,2839.09,100
0
Anyta 14 Сен 2020 в 19:11

2 ответа

Лучший ответ

Вместо использования np.nan_to_num(x, 0) вы можете использовать следующее:

row = ['' if np.isnan(x) else x for x in row]

Если вы хотите удалить и нули (как указано во втором примере), вы можете просто расширить условие:

row = ['' if np.isnan(x) or x == 0 else x for x in row]

См. np.isnan.

0
aasoo 14 Сен 2020 в 16:34

Вы задали два вопроса.

  1. Как экспортировать в csv с пустой строкой вместо NaN ответят в комментариях. Просто используйте pandas. Ответили также здесь.
  2. Ваша неверная синтаксическая ошибка исходит из этой строки
row = [np.nan, '' , regex=True]

Я не уверен, что вы пытались сделать, но вы не можете написать regex=True в list.

0
Tom Wojcik 14 Сен 2020 в 16:21