处理numpy.float时出错?

时间:2013-08-20 22:03:02

标签: python sorting csv file-io numpy

我正在使用python处理csv文件。

我编写了以下脚本来处理文件:

import pickle
import numpy as np
from csv import reader, writer


dic1 = {'a': 2, 'b': 2, 'c': 2}
dic2 = {'a': 2,'b': 2,'c': 0}
number = dict()

for k in dic1:
    number[k] = dic1[k] + dic2[k]

ctVar = {'a': [0.093323751331788565, -1.0872670058072453, '', 8.3574590513050264], 'b': [0.053169909627947334, -1.0825742255395172, '', 8.0033788558001984], 'c': [-0.44681777279768059, 2.2380488442495348]}

Var = {}

for k in number:
    Var[k] = number[k]


def findIndex(myList, number):
    n = str(number)
    m = len(n)
    for elt in myList:
        e = str(elt)
        l = len(e)
        mi = min(m,l)
        if e[:mi-1] == n[:mi-1]:
            return myList.index(elt)

def sortContent(myList):
    if '' in myList:
        result = ['']
        myList.remove('')
    else:
        result = []

    myList.sort()
    result = myList + result
    return result

csv文件的摘录如下:(信息:空白很重要。为了提高可读性,我注意到BL,但它们应该只是空的情况)

这些列包含很少次重复的元素(包括'')。

  

     

0.0933237513

     

-1.0872670058

     

0.0933237513

     

BL

     

BL

     

0.0933237513

     

0.0933237513

     

0.0933237513

     

BL

第二栏:

  

B'/ P>      

0.0531699096

     

-1.0825742255

     

0.0531699096

     

BL

     

BL

     

0.0531699096

     

0.0531699096

     

0.0531699096

     

BL

第三栏:

  

C

     

-0.4468177728

     

2.2380488443

     

-0.4468177728

     

-0.4468177728

     

-0.4468177728

     

-0.4468177728

     

-0.4468177728

     

2.2380488443

     

2.2380488443

我刚刚发布了代码的摘录(我遇到了问题),我们看不到它的效用。基本上,它是我用来修改此csv文件并以不同方式编码的更大代码的一部分。

在这个摘录中,我试图在某个点(第68行)对包含数字和''的列表的元素进行排序。

当我删除执行此操作的行时,打印的元素是每列的元素(不重复)。

问题是,当我尝试对它们进行排序时,不再考虑''。然而,当我使用''的列表测试我的函数sortContent时,它运行得很好。

我认为这个问题与我的列表中使用numpy.float64元素有关。所以我converted所有这些元素都浮动,但问题仍然存在。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

我认为您的意思是在其他内容上使用sortContent(显然,如果您希望ctVar中的预定义列表中的值按特定顺序排列,您可以在代码中按顺序排列它们而不是对它们进行排序在运行时)。

让我们一块一块地浏览你的sortContent

if '' in myList:
    result = ['']
    myList.remove('')

如果传入的列表对象(让我们调用此List 1)具有项'',则使用''创建一个新的列表对象(让我们称之为List 2),并删除第一个实例列表1中的''

mylist.Sort()

现在,对列表1的内容进行排序。

result = myList + result

现在使用列表1和列表2的内容创建一个新的列表对象(称之为列表3)。

return result

请记住,列表1(传入的列表对象)仍然删除了''