如何分配值以从另一列的csv文件的一列中列出

时间:2018-07-25 07:19:20

标签: python python-3.x

我在csv文件的第1列中有一个令牌列表,如下所示:

subject               rate  
['a','b','c']        0.11  
['a','d','c']        0.3  
['c','e']            0.07  
['f','g','h','i']    0.18  

以下是导致上述格式的代码:

reader = csv.reader(open('prom_sub.csv', 'r'))
writer = csv.writer(open('prom_token.csv', 'w', newline = ''))
stop_words = set(stopwords.words('english'))
for  row in reader:
    s = row[0]
    r = row[1]
    rm_dig = str.maketrans('','', digits)                                   
    s = s.translate(rm_dig)
    tr = str.maketrans('','', string.punctuation)
    tokens = nltk.word_tokenize(s.lower().translate(tr))
    filtered_sentence = [w for w in tokens if not w in stop_words]
writer.writerow([filtered_sentence, r])

现在,我想将第2列中的值分配给第1列中的每个标记。也就是说,这就是我要取出的方式:

subject         rate  
a               0.11  
b               0.11  
c               0.11  
a               0.3  
d               0.3  
c               0.3  
c               0.07  
e               0.07  
f               0.18  
g               0.18  
h               0.18
i               0.18

我尝试使用简单的for循环以所需的格式获取列1。还有其他方法可以使用python吗? 我想要来自prom_token.csv的上述格式在另一个csv文件中。谢谢。

2 个答案:

答案 0 :(得分:0)

您没有将代码放在这里,所以也许collections.defaultdict会帮助您,我不确定我的代码,因为我的系统中现在没有python,我认为这将帮助您:

import csv
import collections as co

dd = co.defaultdict(list)
with open('yourCSV.csv'),'rb') as fin:
    dr = csv.DictReader(fin)
    for line in dr:
        dd[line['subject']].append(line['rate'])

答案 1 :(得分:0)

您的中介格式很难处理。第一个字段是字符串列表的Python表示形式,不是标准格式。如果可以的话,应该避免这种情况。

假设您别无选择,只能解析该格式,唯一可靠的解析方法是在literal_eval模块中使用ast,即使在极端情况下,也可以返回原始字符串列表。因此,您的转换脚本可能类似于:

with open('prom_token.csv') as fdin, open('outfile.csv', 'w', endline='') as fdout:
    reader = csv.reader(fdin)
    writer = csr.writer(fdout)
    for row in reader:
        for elt in ast.literal_eval(row[0]):   # split the Python representation of a list
            writer.writeline(elt, row[1])