搜索行并更新列

时间:2017-08-30 14:58:13

标签: python

我经常搜索但却无法找到适当且快速的任务解决方案。 我想完成以下事情:

  • 在文本中搜索短语,并在找到所有单词时标记记录

我有一个数据框,如:
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中对熊猫安静了。

有人可以以适当的方式指导我如何完成我试图完成的任务吗?

1 个答案:

答案 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")