我经常搜索但却无法找到适当且快速的任务解决方案。 我想完成以下事情:
我有一个数据框,如:
ArticleID,Article Text等,
30000110,无神论共和国克林顿基金会1600万元
30000111,疾病周facebook封锁用户自杀日本
30000146,阅读自杀费用日本经济每年40亿美元
30000147,事情经常与facebook用户主要持续发生冲突
30000148,阅读德国蓬勃发展的经济转移超速状态
30000149,阅读大众汽车水龙头俄罗斯天然气工业公司燃气供电
30000164,上周facebook封锁了位于泰国的用户
30000165,事件采取了特朗普选举州萨克森anhalt g
30000166,增加活动特朗普tpp注意到从早上8点开始cet
第二个DataFrame,如
ThemeID,ThemeText
1个facebook用户
2克林顿基金会
3自杀日本病
4王牌选举
我希望匹配某些文本,如果在文章文本中找到我为其指定主题
最终输出应如下所示:
ArticleID,ThemeID1,ThemeID2,ThemeID3,ThemeID4等
30000110,0,1,0,0
30000111,1,0,1,0
30000146,0,0,0,0
30000147,1,0,0,0
30000148,0,0,0,0
30000149,0,0,0,0
30000164,0,0,0,0
30000165,0,0,0,1,
30000166,0,0,0,0
我的代码:
for st_row in stem_file:
with open('Stemmed_Themes.csv', 'r') as f:
reader = csv.reader(f)
for row in reader:
tokens = nltk.word_tokenize(row[2])
for i in tokens:
if i in st_row[9]:
if tokens.index(i)+1 == len(tokens):
article_List.append(st_row[2])
token_list.append(row[2])
date_List.append(st_row[4])
else:
break
data = pd.DataFrame({'articleID': article_List,'Theme': token_list, 'article_Date': date_List})
data.to_csv(fileName[:-4]+'_Themed.csv')
我能够通过使用上面的代码来识别具有文本的行,但我不知道如何根据我的需要进行格式化,如上所述。我在网上看了一些大熊猫代码link:
code:
for x in X11.E.unique():
X11[x]=(X11.E==x).astype(int)
上面的代码完成了在数据匹配时创建列和标记二进制文件的工作,但是我无法理解如何根据我的需要调整它。我在python中对熊猫安静了。
有人可以以适当的方式指导我如何完成我试图完成的任务吗?
答案 0 :(得分:0)
嗯,我不确定这是否是最好的方法,但它能为我完成这项工作: 所以这里的变化是,我试图用熊猫做,我是新的,所以不知道该怎么做。但由于时间的限制,我改变了方法。所以我创建了列表字典,以便在for循环本身中保持标志值= 1以匹配其他0。然后将每个列表用作列。我希望这可能会有所帮助。如果有人能提出更好的方法,我会很高兴。
# -*- coding: utf-8 -*-
"""
Created on Thu Aug 31 00:36:55 2017
@author: Amit
"""
import nltk, csv, pandas as pd
csv.field_size_limit(500 * 1024 * 1024)
def themify(DataFile, ThemeFile):
themelists = {}
for i in range(len(list(csv.reader(open(ThemeFile, 'r'))))):
themelists[str(i)] = []
article_ID = []
with open(DataFile, 'r') as stem:
stem_file = csv.reader(stem)
for st_row in stem_file:
article_ID.append(st_row[0])
with open(ThemeFile, 'r') as f:
reader = csv.reader(f)
for row in reader:
# print themelists[row[0]]
tokens = nltk.word_tokenize(row[2])
for i in tokens:
print "still working"
print "------------------------"
if i in st_row[4]:
if tokens.index(i)+1 == len(tokens):
article_ID.append(st_row[0])
themelists[row[0]].append("1")
# print themelists[row[0]]
else:
# print "get the next tokens"
article_ID.append(st_row[0])
themelists[row[0]].append("0")
break
# print article_ID
# print "----------------------------"
# print themelists
dataFrame_mid = pd.DataFrame({'articleID': article_ID})
dataFrame_Final = dataFrame_mid.assign(**themelists)
dataFrame_Final.to_csv(DataFile[:-4]+"0831_themed.csv", encoding='utf-8')
themify("Stemmed_RT.csv", "ThemeFile.csv")