gpt4 book ai didi

python - 将 'apply' 与 Pandas 数据框元素中的数组一起使用

转载 作者:行者123 更新时间:2023-11-28 17:26:53 26 4
gpt4 key购买 nike

我正在使用在数据框元素中包含数组的 Pandas 数据框。我试图对这些元素“应用”一个函数,然后返回一个数组。但是我有一些非常不一致的行为。该函数前几次运行正常,但随后失败。这是我的代码:

import pandas as pd
import numpy as np

def g(x): # Function fails if I omit the .tolist()
return (np.concatenate([x['B'][1:], x['C'][1:]])).tolist()

df = pd.DataFrame({'A' : (1,2,3), \
'B': (np.array([0,1,2,3]),np.array([3,4,5,6]),np.array([6,7,8,9])), \
'C': (np.array([0,1,2,3]),np.array([2,9,6,9]),np.array([2,4,6,7]))})
# Before we start
print(df)
print("B is type: ", type(df.loc[0,'B']))
# First time
df['G'] = df.apply(g, axis=1)
print("G is type: ", type(df.loc[0,'G']))
# Second time
df['H'] = df.apply(g, axis=1)
print("H is type: ", type(df.loc[0,'H']))
# Third time
df['I'] = df.apply(g, axis=1)
print("I is type: ", type(df.loc[0,'I']))
# Fourth time - this one fails for me
df['J'] = df.apply(g, axis=1)
print("J is type: ", type(df.loc[0,'J']))
# Fifth time
df['K'] = df.apply(g, axis=1)
print("K is type: ", type(df.loc[0,'K']))

代码对我来说运行良好,直到 df['J'] 行失败。输出是这样的:

   A             B             C
0 1 [0, 1, 2, 3] [0, 1, 2, 3]
1 2 [3, 4, 5, 6] [2, 9, 6, 9]
2 3 [6, 7, 8, 9] [2, 4, 6, 7]
B is type: <class 'numpy.ndarray'>
G is type: <class 'list'>
H is type: <class 'list'>
I is type: <class 'list'>

然后是一个很长的错误消息,以 “ValueError:Wrong number of items passed 6, placement implies 1” 结尾,还有一个 “KeyError: 'J' " 也在那里。

疯狂的是函数在前几次运行良好。我的问题是:

  • 为什么我的代码在到达 df['J'] 时会失败?
  • 如何让 g(x) 返回一个 numpy 数组而不是一个列表?如果我遗漏了 .tolist() 它会给我一个错误。
  • 有没有更简单的方法来处理数据框元素内的数组?

我们将非常感谢任何帮助!我花了 2 天时间试图了解这里发生了什么。

附言我没有解释为什么我在数据框元素中使用数组,但如果您认为这有帮助,我可以解释。

最佳答案

在你应用 g 函数的不同时间之间,你的数据帧发生了变化,那么 pandas 的 react 每次都不一样也就不足为奇了。如果你只需要将它应用到 BC 列,我建议你输入:

df['J'] = df[['B','C']].apply(g, axis=1)
print("J is type: ", type(df.loc[0,'J']))

这样它工作正常(但它再次只考虑列 BC)。

至于错误,根据 Ians 的说法,这是因为一旦 apply 的输出超过 6 列,它就会变成 DataFrame 而不是 Series .那么就不能设置为df['J']

关于python - 将 'apply' 与 Pandas 数据框元素中的数组一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38140302/

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