如何将值从另一列分配到csv文件中一列中的列表



我在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还有其他方法吗?我希望在另一个csv文件中使用prom_token.csv中的上述格式。谢谢

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

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

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])

你没有把你的代码放在这里,所以也许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'])

相关内容

最新更新