使用Python在CSV列中格式化不同类型的数据

时间:2014-03-11 22:47:08

标签: python csv

我正在使用Python将多个词典写入csv文件。第一列是带有IDS的列,接下来的几列是浮点数据,格式化为两位小数的精度,最后一列是字符串数据。我是初学者,所以这条错误信息让我陷入了困境。

print TotalData
({0.0: 7194.9500000000035, 1.0: 2456.1200000000003, 2.0: 2333.0699999999997, 3.0: 1645.37}, {0.0: 27400.0, 1.0: 32900.0, 2.0: 42200.0, 3.0: 40600.0}, {0.0: 33, 1.0: 35, 2.0: 35, 3.0: 42}, {0.0: 1800.0, 1.0: 1900.0, 2.0: 1900.0, 3.0: 1800.0}, {0.0: 800.0, 1.0: 500.0, 2.0: 400.0, 3.0: 500.0}, {0.0: 830.30303030303025, 1.0: 940.0, 2.0: 1205.7142857142858, 3.0: 966.66666666666663}, {0.0: 101.48148148148148, 1.0: 82.25, 2.0: 136.1290322580645, 3.0: 101.49999999999999}, {0.0: -400.0, 1.0: 7100.0, 2.0: -11200.0, 3.0: -600.0}, {0.0: -0.014598540145985401, 1.0: 0.21580547112462006, 2.0: -0.26540284360189575, 3.0: -0.014778325123152709}, {0.0: 'POINT(254123,8.03835e+06)', 1.0: 'POINT(254603,8.03829e+06)', 2.0: 'POINT(254905,8.03863e+06)', 3.0: 'POINT(254606,8.03871e+06)'})

这些是我的词典。

TotalData = LongCanal, ConsoSom, ConsoCompte,  ConsoMax, ConsoMin, ConsoMoyn, Rendement, vFuites, ILP, XYcoord
ListData = list(TotalData)

with open('AEP_data.csv', 'wb') as ofile:
    writer = csv.writer(ofile, quoting=csv.QUOTE_NONE, delimiter='\t')
    writer.writerow(['FID_CG', 'LongCanal', 'ConsoSom', 'ConsoCompte', 'ConsoMax', 'ConsoMin', 'ConsoMoyn', 'Rendement', 'vFuites', 'ILP', 'XYcoord'])
    for key in sorted(LongCanal.iterkeys(), key=lambda x: int(x)):
        writer.writerow([key] + ['{0:.2f}'.format(d[key]) for d in TotalData[0:8]] + [d[key] for d in TotalData[9]])



TypeError: 'float' object has no attribute '__getitem__'

当我删除字符串字典时,将所有浮点值格式化为' {0:.2f}'一切正常。

任何帮助将不胜感激。 Mahalo提前。

1 个答案:

答案 0 :(得分:1)

错误信息是说你认为的一件事是字典,实际上只是一个浮点数。如果我们尝试打印writer声明的最后一部分:

print [d[key] for d in TotalData[9]]

我们得到与上面相同的错误:

TypeError: 'float' object has no attribute '__getitem__'

所以我们确定了问题的根源。

我无法确定您要执行的操作,但是您的key参数与最后一次列表理解中d的值完全匹配。因此,我将继续猜测这就是你想要的:

for key in sorted(LongCanal.iterkeys(), key=lambda x: int(x)):
    writer.writerow([key] + ['{0:.2f}'.format(d[key]) for d in TotalData[0:8]] + [TotalData[9][key]])