我有一个数据框和一个列表
df = pd.DataFrame({'A':[1,2,3], 'B':[4,5,6]})
mylist= [10,20,30,40,50]
我想在数据帧的每一行中都有一个列表作为元素。如果我喜欢here,
df['C'] = mylist
Pandas尝试每行广播一个值,因此出现错误Length of values does not match length of index
。
A B C
0 1 4 [10,20,40,50]
1 2 5 [10,20,40,50]
2 3 6 [10,20,40,50]
答案 0 :(得分:5)
首先,我认为在good idea中使用list
大熊猫不是这样。
但可以通过列表理解:
df['C'] = [mylist for i in df.index]
#another solution
#df['C'] = pd.Series([mylist] * len(df))
print (df)
A B C
0 1 4 [10, 20, 30, 40, 50]
1 2 5 [10, 20, 30, 40, 50]
2 3 6 [10, 20, 30, 40, 50]
答案 1 :(得分:4)
使用np.tile
的另一种选择:
df['C'] = np.tile(mylist, (len(df),1)).tolist()
print (df)
A B C
0 1 4 [10, 20, 30, 40, 50]
1 2 5 [10, 20, 30, 40, 50]
2 3 6 [10, 20, 30, 40, 50]
答案 2 :(得分:3)
只需用df.assign来完成我的较早答案,即从@jezrael借来的列表理解
>>> df
A B
0 1 4
1 2 5
2 3 6
>>> df.assign(C = [mylist for i in df.index])
A B C
0 1 4 [10, 20, 30, 40, 50]
1 2 5 [10, 20, 30, 40, 50]
2 3 6 [10, 20, 30, 40, 50]
或,将其永久添加到数据框
df = df.assign(C = [mylist for i in df.index])
另一种实现方法 df.insert
由于我们要指定列的顺序,因此可以使用insert 在此处通过在索引2处插入(因此应在数据帧中插入第三个col)
>>> df.insert(2, 'C', '[10, 20, 30, 40, 50]') # directly assigning the list
>>> df
A B C
0 1 4 [10, 20, 30, 40, 50]
1 2 5 [10, 20, 30, 40, 50]
2 3 6 [10, 20, 30, 40, 50]
答案 3 :(得分:1)