将类别转换为csv文件python中的数字

时间:2017-02-06 16:04:58

标签: python csv

我有一个像这样的csv文件

1,a,add
2,b,more
1,c,thinking
3,a,to
1,c,me

我希望将类别功能转换为数字格式,如下所示:

1,0,0
2,1,1
1,2,2
3,0,3
1,2,4

但我有一个问题:我在python中读取和写入文件时无法循环,要么只转换第二列,要么对第三列没有任何作用,要么转换第二列和第三列,但不转换为同一时间(类似于:

1,0,add
2,1,more
1,2,thinking
3,0,to
1,2,me
1,a,0
2,b,1
1,c,2
3,a,3
1,c,4

所以这是我的代码:

def construction_liste(reader, col):
    liste_mot_different=[]
    for line in reader:
        if line[col] not in liste_mot_different:
            liste_mot_different.append(line[col])
    #print liste_mot_different
    return liste_mot_different


def table_correspondance(liste):
    table_correspondance = []
    for i, item in enumerate(liste):
        table_correspondance.append((item,i))
    print table_correspondance
    return table_correspondance

def replace_word2int(line, table_correspondance):
    new_line = []
    for item in line:
        liste_table= [y[0] for y in table_correspondance]
        if item not in liste_table:
            new_line.append(item)
        else:
            i = [y[0] for y in table_correspondance].index(item)
            new_line.append(str(table_correspondance[i][1]))
    new_line = ",".join( new_line )
    new_line += "\n"
    print new_line
    return new_line

input_file = sys.argv[1]
output_file = sys.argv[2]

i1 = open( input_file, 'rb' )
i2 = open( input_file, 'rb' )

reader1=csv.reader( i1 )
reader2=csv.reader( i2 )

o = open( output_file, 'w' )

sequence = [2,5]

for col in seq:
    liste_mot_different=construction_liste(reader1,col)
    table_correspondance_word2int=table_correspondance(liste_mot_different)

    for line in reader2:
        nouvelle_ligne = replace_word2int(line, table_correspondance_word2int)
        o.write( nouvelle_ligne )



i1.close()
i2.close()
o.close()

在第1个函数中,我查看同一列的每一行,并为所有行中的同一列构造不同字符串的列表 在第二个函数中,我构造了一个“映射表”,将整数映射到先前构建的列表中的字符串 在第3个函数中,在文件中我将所有字符串替换为相应的整数,逐列

它适用于我的序列中的第一列,但不适用于其他列,我认为这是因为一旦它读取了所有行,它就不会再次执行了吗?

我怎么能这样做?谢谢

我也尝试使用with [...] as,但它既不能正常工作

0 个答案:

没有答案