假设我有一个数据框,df
并且我想创建一个填充0的新列,我使用:
df['new_col'] = 0
到目前为止,没有问题。但是,如果我要使用的值是列表,那么它将不起作用:
df['new_col'] = my_list
ValueError: Length of values does not match length of index
我知道为什么这行不通(pandas试图为列的每个单元格分配列表的一个值),但是我们如何避免这种行为呢?(如果不清楚,我希望新列的每个单元格都包含相同的预定义列表)
注意:我也尝试过:df.assign(new_col = my_list)
,同样的问题
您必须执行以下操作:
df['new_col'] = [my_list] * len(df)
例子:
In [13]:
df = pd.DataFrame(np.random.randn(5,3), columns=list('abc'))
df
Out[13]:
a b c
0 -0.010414 1.859791 0.184692
1 -0.818050 -0.287306 -1.390080
2 -0.054434 0.106212 1.542137
3 -0.226433 0.390355 0.437592
4 -0.204653 -2.388690 0.106218
In [17]:
df['b'] = [[234]] * len(df)
df
Out[17]:
a b c
0 -0.010414 [234] 0.184692
1 -0.818050 [234] -1.390080
2 -0.054434 [234] 1.542137
3 -0.226433 [234] 0.437592
4 -0.204653 [234] 0.106218
请注意,dfs已针对标量值进行了优化,存储非标量值在我看来不合时宜,因为过滤,查找,获取和设置会成问题,以至于变得烦人
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句