数据帧值错误:传递值的形状为(X,),索引暗示(X,Y)

我得到一个错误,我不知道如何修复它

以下似乎有效:

def random(行):
返回[1,2,3,4]
df=pandas.DataFrame(np.random.randn(5,4),columns=list('ABCD'))
df.apply(func=random,axis=1)

我的输出是:

[1,2,3,4]
[1,2,3,4]
[1,2,3,4]
[1,2,3,4]

但是,当我将其中一列更改为值(如1或None)时:

def random(行):
返回[1,2,3,4]
df=pandas.DataFrame(np.random.randn(5,4),columns=list('ABCD'))
df['E']=1
df.apply(func=random,axis=1)

我得到了错误的答案:

ValueError:传递值的形状为(5,),索引暗示(5,5)

这件事我已经苦思冥想了好几天了,但似乎什么都不管用。有趣的是当我改变

def random(行):
返回[1,2,3,4]

def random(行):
打印[1,2,3,4]

一切似乎都正常

这个问题是问这个问题的一种更清晰的方式,我觉得这个问题可能让人困惑

我的目标是为每一行计算一个列表,然后从中创建一列

编辑:我最初从一个包含一列的数据帧开始。我在4个差异应用步骤中添加了4列,然后当我尝试添加另一列时,会出现此错误

如果您的目标是向DataFrame添加新列,只需将函数编写为返回标量值(而不是列表)的函数,如下所示:

&gt&燃气轮机&燃气轮机;def随机(行):
...     返回行。平均值()

然后使用apply:

&gt&燃气轮机&燃气轮机;df['new']=df.apply(func=random,axis=1)
&燃气轮机&燃气轮机&燃气轮机;df
A、B、C、D、新
0  0.201143 -2.345828 -2.186106 -0.784721 -1.278878
1 -0.198460  0.544879  0.554407 -0.161357  0.184867
2  0.269807  1.132344  0.120303 -0.116843  0.351403
3 -1.131396  1.278477  1.567599  0.483912  0.549648
4  0.288147  0.382764 -0.840972  0.838950  0.167222

我不知道您的新列是否可能包含列表,但它完全可能包含元组((…),而不是[…]):

&gt&燃气轮机&燃气轮机;def随机(行):
...    返回(1,2,3,4,5)
...
&燃气轮机&燃气轮机&燃气轮机;df['new']=df.apply(func=random,axis=1)
&燃气轮机&燃气轮机&燃气轮机;df
A、B、C、D、新
0  0.201143 -2.345828 -2.186106 -0.784721  (1, 2, 3, 4, 5)
1 -0.198460  0.544879  0.554407 -0.161357  (1, 2, 3, 4, 5)
2  0.269807  1.132344  0.120303 -0.116843  (1, 2, 3, 4, 5)
3 -1.131396  1.278477  1.567599  0.483912  (1, 2, 3, 4, 5)
4  0.288147  0.382764 -0.840972  0.838950  (1, 2, 3, 4, 5)

发表评论