代码之家  ›  专栏  ›  技术社区  ›  U13-Forward

为什么不能用“replace”方法用列表替换整数?pandas

  •  5
  • U13-Forward  · 技术社区  · 6 年前

    所以假设我有一个熊猫数据框架,如下所示:

    df=pd.DataFrame({'a':[1,2,3,0]})
    

    所以我的目标是取代 0 用价值 [] (空列表)在此数据帧中,但我做到了:

    print(df.replace(0,[]))
    

    但它给了我一个错误:

    TypeError: Invalid "to_replace" type: 'int'
    

    我尝试了所有可能的方法,例如:

    df[df==0]=[]
    

    等。。。

    但没什么用。

    期望输出(如有混淆):

       a
    0  1
    1  2
    2  3
    3 []
    
    2 回复  |  直到 6 年前
        1
  •  3
  •   jezrael    6 年前

    通过列表理解是可能的,但由于混合内容-数字和列表,不建议:

    df['a'] = [[] if x == 0 else x for x in df.a]
    
    print (df)
    
        a
    0   1
    1   2
    2   3
    3  []
    

    并替换所有列中的所有值:

    df = df.applymap(lambda x: [] if x == 0 else x)
    print (df)
        a
    0   1
    1   2
    2   3
    3  []
    
        2
  •  1
  •   Lie Ryan Bryan    6 年前

    这里有两个问题。首先是大熊猫处理清单时的怪癖。要用列表替换数据帧中的值,您需要这样做;

    df.loc[df.a == 0, "a"] = [[] for _ in df[df.a == 0]]
    

    这创造 n 基于符合条件的项目数的空列表( df == 0 )

    第二个问题是,您的列是整数类型的,不能将列表存储在整数列中。因此,在分配列表之前,首先需要将列类型转换为对象。

    df = df.astype(object)
    df.loc[df.a == 0, "a"] = [[] for _ in df[df.a == 0]]