【发布时间】:2026-01-03 01:10:02
【问题描述】:
我收到一个错误,我不知道如何解决它。
以下似乎有效:
def random(row):
return [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 或无之类的值时:
def random(row):
return [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: Shape of passed values is (5,), indices imply (5, 5)
我已经为此苦苦挣扎了几天,但似乎没有任何效果。有趣的是,当我改变时
def random(row):
return [1,2,3,4]
到
def random(row):
print [1,2,3,4]
似乎一切正常。
这个问题是asking this question的更清晰的方式,我觉得可能会让人困惑。
我的目标是为每一行计算一个列表,然后从中创建一个列。
编辑:我最初从一个具有一列的数据框开始。我在 4 个不同的应用步骤中添加了 4 列,然后当我尝试添加另一列时出现此错误。
【问题讨论】:
-
你到底想做什么?将 apply 与返回列表的函数一起使用将尝试将其强制为系列,因此它需要与原始长度相同的长度,或者一个标量(包括无)。
-
您的问题中的输出不是您从应用中得到的。在第一种情况下,您的输出是具有 4 列的 DataFrame,正如@Jeff 所说,它被强制列表成行。
-
我正在尝试向数据框添加一列。此列将填充计算值。计算值是根据每一行的值计算的。函数 random 是计算值的东西。
-
@RomanPekar 我认为输出是 apply 的输出,因为 apply 将通过 func=random 运行每一行,并且该 func 将打印出 [1,2,3,4]。我不确定你在指出什么。
-
这在 0.16 版本的 pandas 中似乎没有发生
标签: python-2.7 pandas ipython dataframe