gpt4 book ai didi

python - pandas:用一些 numpy 数组填充一列

转载 作者:太空狗 更新时间:2023-10-29 18:04:44 24 4
gpt4 key购买 nike

我使用的是 python2.7 和 pandas 0.11.0。

我尝试使用 DataFrame.apply(func) 填充数据框的一列。 func() 函数应该返回一个 numpy 数组 (1x3)。

import pandas as pd
import numpy as np

df= pd.DataFrame(np.random.randn(4, 3), columns=list('ABC'))
print(df)

A B C
0 0.910142 0.788300 0.114164
1 -0.603282 -0.625895 2.843130
2 1.823752 -0.091736 -0.107781
3 0.447743 -0.163605 0.514052

用于测试目的的函数:

def test(row):
# some complex calc here
# based on the values from different columns
return np.array((1,2,3))

df['D'] = df.apply(test, axis=1)

[...]
ValueError: Wrong number of items passed 1, indices imply 3

有趣的是,当我从头开始创建数据框时,它运行良好,并按预期返回:

dic = {'A': {0: 0.9, 1: -0.6, 2: 1.8, 3: 0.4}, 
'C': {0: 0.1, 1: 2.8, 2: -0.1, 3: 0.5},
'B': {0: 0.7, 1: -0.6, 2: -0.1, 3: -0.1},
'D': {0:np.array((1,2,3)),
1:np.array((1,2,3)),
2:np.array((1,2,3)),
3:np.array((1,2,3))}}

df= pd.DataFrame(dic)
print(df)
A B C D
0 0.9 0.7 0.1 [1, 2, 3]
1 -0.6 -0.6 2.8 [1, 2, 3]
2 1.8 -0.1 -0.1 [1, 2, 3]
3 0.4 -0.1 0.5 [1, 2, 3]

提前致谢

最佳答案

如果您尝试从传递给 apply 的函数返回多个值,并且您调用 apply 的 DataFrame 沿轴具有相同数量的项目(在本例中为列)作为您返回的值的数量,Pandas 将从返回值创建一个 DataFrame,其标签与原始 DataFrame 相同。如果你这样做,你可以看到这个:

>>> def test(row):
return [1, 2, 3]
>>> df= pd.DataFrame(np.random.randn(4, 3), columns=list('ABC'))
>>> df.apply(test, axis=1)
A B C
0 1 2 3
1 1 2 3
2 1 2 3
3 1 2 3

这就是您收到错误的原因,因为您无法将 DataFrame 分配给 DataFrame 列。

如果您返回任何其他数量的值,它将只返回一个可以分配的系列对象:

>>> def test(row):
return [1, 2]
>>> df= pd.DataFrame(np.random.randn(4, 3), columns=list('ABC'))
>>> df.apply(test, axis=1)
0 [1, 2]
1 [1, 2]
2 [1, 2]
3 [1, 2]
>>> df['D'] = df.apply(test, axis=1)
>>> df
A B C D
0 0.333535 0.209745 -0.972413 [1, 2]
1 0.469590 0.107491 -1.248670 [1, 2]
2 0.234444 0.093290 -0.853348 [1, 2]
3 1.021356 0.092704 -0.406727 [1, 2]

我不确定为什么 Pandas 这样做,以及为什么它只在返回值为 listndarray 时才这样做,因为它不会这样做如果你返回一个 tuple:

>>> def test(row):
return (1, 2, 3)
>>> df= pd.DataFrame(np.random.randn(4, 3), columns=list('ABC'))
>>> df['D'] = df.apply(test, axis=1)
>>> df
A B C D
0 0.121136 0.541198 -0.281972 (1, 2, 3)
1 0.569091 0.944344 0.861057 (1, 2, 3)
2 -1.742484 -0.077317 0.181656 (1, 2, 3)
3 -1.541244 0.174428 0.660123 (1, 2, 3)

关于python - pandas:用一些 numpy 数组填充一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18641148/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com