我在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文件中。谢谢。
答案 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])