熊猫-如何在细胞中处理阵列

时间:2019-08-20 13:16:11

标签: python arrays pandas numpy

我有一个带有数组的数据框。示例:

df = pd.DataFrame([('a', [1,2,3]), ('b', [4,5,6])], columns=['name', 'values'])

  name     values
0    a  [1, 2, 3]
1    b  [4, 5, 6]

我知道values col数组的长度相同。 我想计算value数组的axis = 0上的平均值。 在numpy中,我可以这样做:

np.array([[1,2,3], [4,5,6]]).mean(axis=0) # result: array([2.5, 3.5, 4.5])

大熊猫有可能吗?
如果没有,我如何轻松将值col转换为numpy数组? 我已经尝试过df['values'].values,但这没有给出矩阵:

array([list([1, 2, 3]), list([4, 5, 6])], dtype=object)

3 个答案:

答案 0 :(得分:3)

使用pandas series.tolist将熊猫系列转换为列表

np.array(df['values'].tolist()).mean(axis = 0)

#o/p
array([2.5, 3.5, 4.5])

答案 1 :(得分:0)

如果您只想处理一列,则可以在相关列上使用applyapply(例如列)上的pd.Series适用于每个元素。 例如:

df = pd.DataFrame([('a', [1,2,3]), ('b', [4,5,6])], columns=['name', 'values'])
df['values_mean'] = df['values'].apply(lambda x: np.mean(x, axis=0))
df

收益:

    name    values  values_mean
0   a   [1, 2, 3]   2.0
1   b   [4, 5, 6]   5.0

如果您有多于一列,则applymap函数对每个元素pd.DataFrame有效(而不是对数据列的apply对每个元素有效)。例如:

df = pd.DataFrame([('a', [1,2,3]), ('b', [4,5,6])], columns=['name', 'values'])
df[['values']].applymap(lambda x: np.mean(x, axis=0))

收益:

    values
0   2.0
1   5.0

答案 2 :(得分:0)

这是一种方法

pd.DataFrame(df['values'].tolist()).mean()
Out[336]: 
0    2.5
1    3.5
2    4.5
dtype: float64