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

熊猫将对象的空列添加到数据框[重复]

  •  4
  • Joylove  · 技术社区  · 6 年前

    这个问题已经有了答案:

    How to add an empty column to a dataframe?

    这部分已经包括在内。

    这个 dtype of df["D"] = np.nan 公认的答案是 dtype=numpy.float64 是的。

    是否有方法将空列表初始化到每个单元格中?

    尝试 df["D"] = [[]] * len(df) 但所有值都指向同一个对象,将一个值设置为一个值将设置所有值。

    df = pd.DataFrame({"A": [1,2,3], "B": [2,3,4]})
    df
    
       A  B
    0  1  2
    1  2  3
    2  3  4
    
    
    df["D"] = [[]] * len(df)
    df
       A  B   D
    0  1  2  []
    1  2  3  []
    2  3  4  []
    
    
    df['D'][1].append(['a','b','c','d'])
    df
       A  B               D
    0  1  2  [[a, b, c, d]]
    1  2  3  [[a, b, c, d]]
    2  3  4  [[a, b, c, d]]
    

    通缉犯

       A  B               D
    0  1  2  []
    1  2  3  [[a, b, c, d]]
    2  3  4  []
    
    2 回复  |  直到 6 年前
        1
  •  6
  •   rafaelc    6 年前

    使用

    df["D"] = [[] for _ in range(len(df))]
    

    而不是

    df["D"] = [[]] * len(df) 
    

    这样你将创建一个不同的 [] 每排。


    基本上 [[] for _ in range(len(df))] 是一个 list comprehension. 它创造了 [] 对于中的每个值 range(len(df)) 是的。

    此代码具有与

    l = []
    for _ in range(len(df)):
        l.append([])
    

    但值得注意的是 更快 我是说, 更简单 写作,甚至更具可读性。

    如果你想进一步了解清单上的理解,我建议你 the answers for this question 是的。

    如果你想进一步了解 为什么会有这种行为 做的时候发生 [[]] * len(df) ,我建议 the answers for this question

        2
  •  1
  •   Kavi Sek    6 年前

    你能不能在创建列时直接传入一个列表列表?然后将列表值赋给一个临时变量,然后使用loc将该列表赋给数据帧中的一个字段

    import pandas as pd
    
    df = pd.DataFrame()
    df['col A'] = [1,12,312,352]
    df['col B'] = [[],[],[],[]]
    
    ser = [1,4,5,6]
    df.loc[2,'col B'] = ser
    df
    

    输出:

    Click Here to View Image

    这有用吗?这就是你要找的吗?