代码之家  ›  专栏  ›  技术社区  ›  singularity2047

错误“builtin_function_or_method”对象不可订阅-在for循环内追加列表时

  •  0
  • singularity2047  · 技术社区  · 6 年前

    我想从for循环中的现有列表中创建一个新的列表,然后通过IF语句传递列表,一次一个元素。我没有适当的知识以这种方式使用列表。因此这篇文章

    f = {'Sales_Person': ['John', 'Tom', 'Dick', 'Harry', 'Rob', 'Mike', 'Miz', 'Sally', 'Buck', 'Roger'],  'location': ['NY', 'NY', 'NY', 'NJ', 'PA', 'NJ', 'NJ', 'PA', 'NY', 'NJ'], 'product_code': ['10NYXX', '11NYXX', '10NYXX', '10NJXY', '11PAXY', '11MNYY', '12NJYX', '11PAYY', '12NYXX', '11CAPQ']}
    df1 = pd.DataFrame(data = f)
    df1['statusNY'] = 'n/a'
    df1['statusPA'] = 'n/a'
    df1['statusIL'] = 'n/a'
    df1['statusOR'] = 'n/a'
    df1['statusNJ'] = 'n/a'
    

    数据看起来像-

    enter image description here

    我取这些列名['statusNY'、'statusPA'、'statusIL'、'statusOR'、'statusNJ']并从中提取状态名[NY、PA、IL或和NJ]。然后我将检查“产品代码”列是否包含这些状态名。如果为真,则将1分配给“statusNY”,如果为假,则将0分配给“statusNY”。与其他列名“statusPA”、“statusIL”、“statusOR”、“statusNJ”类似

    输出应如下所示:

    enter image description here

    我有以下代码:

    for col in ['statusNY', 'statusPA', 'statusIL', 'statusOR', 'statusNJ']:
        x = col[6:8]
        df1.loc[df1['product_code'].str.contains(x) == True, col] = '1'
        df1.loc[df1['product_code'].str.contains(x) == False, col] = '0' 
    

    理想情况下,第二行应该创建一个列表,该列表应该通过第三行和第四行。但这不管用。

    newlist = []
    for col in ['statusNY', 'statusPA', 'statusIL', 'statusOR', 'statusNJ']:
        newlist.append[col[6:8]]
    

    但最终得到了这个错误:TypeError:“builtin_function_or_method”对象不可订阅。我在谷歌上搜索了一下,还查看了其他相关帖子,但结果与我的案例并不太相关。

    2 回复  |  直到 6 年前
        1
  •  2
  •   C.Nivs    6 年前

    改变 append[col[6:8]] append(col[6:8])

    append[blah]

        2
  •  0
  •   cpander    6 年前

    为什么不做这样的事情呢 pipe

    def flag_product_code(df, states):
        df = df.copy()
    
        for state in states:
            df['status' + state] = (df.product_code
                                      .str.contains(state)
                                      .astype(int))
    
        return(df)
    
    df1.pipe(flag_product_code, ['NY', 'PA', 'IL', 'OR', 'NJ'])
    

    这将创建一个函数来标记所需的任何状态,并将列附加到原始数据帧。

    也就是说,您将得到一些意外的结果;特别是,具有产品代码值“11MNYY”的数据的第5行将标记为NY。如果知道product_type的格式将始终与示例数据中的格式相同,则可能需要检查product_type的子字符串。