2016-10-15 117 views
0

我写了一段解析.csv并将数据保存为excel格式的代码。 问题是我在Excel中的所有数据都显示为“存储为文本的数字”,我需要将第3列开始的数据转换为数字类型,因此我可以使用图表来表示它。 我的表看起来像这样:使用Python将CSV转换为Excel

C1  C2  C3 
R1 BlaBla   36552.00233102 ... 
R2   App1  3484.000000000 ... 
R3   App2  3399.000000000 ... 
..................................... 

,这是代码:

f = open("csv_file") 
wb = openpyxl.Workbook() 
ws = wb.active 
reader = csv.reader(f, delimiter=',') 
for i in reader: 
    ws.append(i) 

f.close() 
wb.save("excel_file") 

回答

2

是否CSV文件包含在引号数字元素?如果是这样,那会导致你所看到的。例如,考虑一下:

import openpyxl 
wb = openpyxl.Workbook() 
ws = wb.active 
for i in [['100', 100]]: 
    ws.append(i)  
wb.save("excel_file.xlsx") 

str值写为Excel中的文本元素,而int值写为一个数字。如果您的CSV文件包含

"100", 100 

csv会将其解释为字符串和数字。

您可以通过添加在起从csv文件中的三个列转换的一切:

i[2:] = [float(x) for x in i[2:]] 

到线路,追加i到您的工作簿的权利之前。

+0

我加入我[2:] = [在浮子(X)为X I [2:]]像你说和完美。 –

+0

哎呀!抱歉。修正了我的答案。 – lungj

+0

值得注意的是,openpyxl有一个工作簿选项,用于“猜测”在这种情况下可能工作的值的类型。但我总是建议你自己处理转换。 'wb.guess_types = True'是语法。 –

-3

我建议使用熊猫 pandas.read_csv和pandas.to_excel

1

如果您还没有定义什么样的列是float,你可以尝试浮动与异常处理的值转换。 代码可能成为:

reader = csv.reader(f, delimiter=',') 
for i in reader: 
    try: 
     ws.append(float(i)) 
    except ValueError: 
     ws.append(i) 

f.close() 
+0

这是行不通的,因为'我'会是一整行。 –