【问题标题】:Creating a list of documents using if-else in python在 python 中使用 if-else 创建文档列表
【发布时间】:2018-04-04 11:22:36
【问题描述】:

我有一个包含关键字、rank_organic 和文档列的数据集。对于每个关键字,都有 rank_organic = 1、2、3、4 或 5 的文档。但对于某些关键字,我缺少一些 rank_organic 字段。

例如:对于关键字 A,我有 rank_organic = 1,2,4,5 并且缺少 3。我想创建一个长度为 5 的文档列表,其中 rank_organic=3,null 或空格应该出现,其余文档应该出现。 下面是我正在使用的代码,但它给出了错误。请帮助我如何实现它。

def key_doc(data):
    lis=[]
    for i in pd.unique(data['keyword']):
        a = data.loc[data['keyword'].isin([i])]
        j = i.replace(" ","_")

        j =  Node(i, parent= Testing,
                   documents=[(a.loc[(a['rank_organic']==1)])['vocab'].tolist()[0]
                            ,(a.loc[(a['rank_organic']==2)])['vocab'].tolist()[0]
                            ,(a.loc[(a['rank_organic']==3)])['vocab'].tolist()[0]
                            ,(a.loc[(a['rank_organic']==4)])['vocab'].tolist()[0]
                            ,(a.loc[(a['rank_organic']==5)])['vocab'].tolist()[0]])

#        print j.name, len(j.documents)
        lis.append(j)
    return lis

错误:

,(a.loc[(a['rank_organic']==3)])['vocab'].tolist()[0]

IndexError: list index out of range

【问题讨论】:

    标签: python python-3.x pandas for-loop if-statement


    【解决方案1】:

    我建议您为此使用列表或字典理解并使用next 检索第一个元素。 next 也有一个可选参数,如果没有要提取的元素,我们将其定义为 [](空列表)。

    docs = [next(iter(a.loc[a['rank_organic'] == i, 'vocab'].tolist()), []) \
            for i in range(1, 6)]
    

    然后将docs 作为您的类实例参数。

    下面是next(iter(lst), ...) 方法工作原理的一个最小示例:-

    lst = [[1, 2, 3], [4], [], [3, 5]]
    
    res = [next(iter(i), []) for i in lst]
    
    # [1, 4, [], 3]
    

    【讨论】:

      猜你喜欢
      • 2020-02-11
      • 2016-10-13
      • 2022-01-02
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多