Записать поплавки в CSV-файл до 2 значащих цифр - PullRequest
0 голосов
/ 18 июня 2019

Моя функция записи выглядит так:

with open(filename, "w") as file:
    file.truncate(0)
    writer = csv.writer(file)
    writer.writerows(input_list)

Мой input_list выглядит так:

[[10.0, 11.0, 20.0, 20.0, 0.8], [40.0, 42.0, 20.0, 20.0, 0.6]]

Мой выходной CSV-файл выглядит так:

10.0,11.0,20.0,20.0,0.8
40.0,42.0,20.0,20.0,0.6

Я хочу, чтобы это выглядело так:

10, 11, 20, 20, 0.8
40, 42, 20, 20, 0.6

Мне бы хотелось форматировать пробелы после самих чисел. Хотя я мог бы добавить что-то в программу, чтобы создать пробел между элементами и проверить, не является ли число меньше 1, перед преобразованием его в int (числа выше 1 не могут быть числами с плавающей запятой), я хотел бы найти более питонное и элегантное решение.

Ответы [ 2 ]

1 голос
/ 18 июня 2019
>>> from math import log10, floor
>>> def round_to_1(x):
...   return round(x, -int(floor(log10(abs(x)))))

Просмотрите все элементы и примените эту функцию перед записью в CSV. Трудоемко, но должно работать.

0 голосов
/ 18 июня 2019

Для этого вы можете использовать библиотеку панд.

= ^ .. ^ =

import pandas as pd

data = [[10.0, 11.0, 20.0, 20.0, 0.8], [40.0, 42.0, 20.0, 20.0, 0.6]]

df = pd.DataFrame(data)
# convert values to int
df[0] = df[0].astype(int)
df[1] = df[1].astype(int)
df[2] = df[2].astype(int)
df[3] = df[3].astype(int)

# save data frame
df.to_csv('data.csv')

Выход:

    0   1   2   3    4
0  10  11  20  20  0.8
1  40  42  20  20  0.6
...