Попытка перенести данные из файла CSV в файл XLSX, чтобы построить из них диаграммы. Данные форматируются в следующем файле CSV с именами каналов в первой строке, единицами измерения во второй строке (время, давление, логическое значение, пустое значение) и данными в третьей строке через X строк:
имя_канала_1,имя_канала_2,имя_канала_3
единица_1, единица_2, единица_3
1,4,0.03
1,7,0,03
1,2,0.02
....
# reading the data in CSV with pandas by:
csv = file.csv
data = pd.read_csv(csv, sep=';')
# creating a workbook / worksheet with:
excel_file_path = r"file.xlsx"
workbook = xlsxwriter.Workbook(excel_file_path, {"nan_inf_to_errors": True})
data_worksheet = workbook.add_worksheet()
Data_chart = workbook.add_worksheet("Chart1")
# adding data to the sheet by:
for column_num, column_name in enumerate(data):
data_worksheet.write(0,column_num,column_name)
data_worksheet.write_column(1, column_num, data[column_name])
Приведенный выше код перенесет все данные в Excel, хотя проблема в том, что данные (которые являются числами) дают зеленый треугольник в верхнем левом углу каждой ячейки в файле Excel с сообщением «Число в этой ячейке отформатировано как текст". Это делает их недоступными для построения графиков, поскольку Excel считает, что это текст, а не числа.
Кроме того, строка единиц измерения (вторая строка) иногда представляет собой слово (сек), иногда логическое значение, иногда пустое, поэтому я не могу просто отформатировать весь столбец данных в формате с плавающей запятой/числом.
Кто-нибудь еще сталкивается с этой проблемой?
Один из способов справиться с этой проблемой — передать преобразование данных в Excel. например, написав =0.03+0
, можно убедиться, что 0,03 — это число, а не текст в Excel.
Вы можете реализовать это, как показано ниже:
# adding data to the sheet by:
for column_num, column_name in enumerate(data):
data_worksheet.write(0, column_num, column_name)
# write the second row (unit_1, unit_2, unit_3)
data_worksheet.write(1, column_num, data[column_name][0])
# write excel formula =0.03+0 to convert text into number
formulas = [f' = {x}+0' for x in data[column_name][1:]]
data_worksheet.write_column(2, column_num, formulas)
workbook.close()
Результат в Excel выглядит следующим образом:
Поскольку вы уже используете параметр конструктора XlsxWriter, вы можете добавить опцию strings_to_numbers
. Это даст вам числовые значения в Excel:
workbook = xlsxwriter.Workbook(
excel_file_path, {"nan_inf_to_errors": True, "strings_to_numbers": True}
)
Выход: