通过 Pandas 和 XLSXwriter 将数据从 CSV 提取到 XLSX,将数字显示为文本时出错

问题描述 投票:0回答:1

尝试将 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 认为它是文本而不是数字。

单位行(第二行)有时是一个单词(秒),有时是布尔值,有时是空,所以我不能只将整列数据格式化为浮点数/数字。

还有其他人遇到这个问题吗?

pandas excel csv formatting xlsxwriter
1个回答
0
投票

解决此问题的一种方法是将数据转换为 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 中的结果如下所示: enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.