【发布时间】:2014-04-04 14:51:09
【问题描述】:
我是 python 和 pandas 的新手,我正在尝试操作 csv 数据文件。我加载了两个数据框,一个包含带有关键字的列,另一个是带有“id”和“word”列的“bagOfWords”。我要做的是在第一个数据框中添加一列,其中包含“列表字符串”中关键字的 id,例如“[1,2,8,99 ...]”。
这是我目前的想法
websitesAlchData = pd.io.parsers.read_csv('websitesAlchData.csv', sep=';', index_col='referer', encoding="utf-8")
bagOfWords = pd.io.parsers.read_csv('bagOfWords.csv', sep=';', header=0, names=["id","words","count"], encoding="utf-8")
a = set(bagOfWords['words'])
websitesAlchData['keywordIds'] = "[]"
for i in websitesAlchData.index
keywords = websitesAlchData.loc[i,'keywords']
try:
keywordsSet = set([ s.lower() for s in keywords.split(",") ])
except:
keywordsSet = set()
existingWords = a & keywordsSet
lista = []
for i in bagOfWords.index:
if bagOfWords.loc[i,'words'] in existingWords:
lista.append(bagOfWords.loc[i,'id'])
websitesAlchData.loc[i,'keywordIds'] = str(lista)
print(str(lista))
print(websitesAlchData.loc[i,'keywordIds'])
websitesAlchData.reset_index(inplace=True)
websitesAlchData.to_csv(path_or_buf = 'websitesAlchDataKeywordCode.csv', index=False, sep=";", encoding="utf-8")
for 循环末尾的两次打印给出了预期的结果,但是当我尝试打印整个数据框“websitesAlchData”时,列“keywordIds”仍然是“[]”,因此它在生成的 .csv 中为好吧。
我的猜测是我在某处创建了一个副本,但我不知道在哪里。
任何想法这里有什么问题或如何以不同的方式做同样的事情? 谢谢!
更新:
网站AlchData.cvs 是这样的
referer;category;keywords
url;int;word0,word2,word3
url;int;word1,word3
...
还有词袋 cvc。
id;index;count
0;word0;11
1;word1;14
2;word2;14
3;word3;14
...
预期输出
referer;category;keywords;keywordIds
url;int;word0,word2,word3;[0,2,3]
url;int;word1,word3;[1,3]
【问题讨论】:
-
你能提供一个你是两个 csv 文件的小例子吗?你应该从那个小例子中得到输出。这听起来应该可以在 1 或 2 行内完成。
-
我添加了示例数据,1-2行确实不错。
-
我只在 python 2.7 中测试过它,但可能会有一些涉及
i的变量阴影/覆盖。您使用i作为两个for循环的变量。