在pandas数据帧中的多个列上应用函数时出错

时间:2013-02-22 11:03:56

标签: python pandas

我对python和pandas都很陌生,所以也许我错过了一些东西,但我无法在网上找到我的问题的解决方案。我尝试运行一个应该应用于在pandas数据帧的三列上逐行汇总值的函数。该任务与描述here完全相同。但是,根据提出的解决方案,我总是得到错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in vecSd
TypeError: only length-1 arrays can be converted to Python scalars

以下是我的功能示例以及我要做的事情:

import pandas as pd
from math import sqrt, pow

# my function
def vector(x, y, z):
    vec=sqrt(pow(x,2)+pow(y,2)+pow(z,2))
    return vec  
# my data frame looks something like this
df=pd.DataFrame({'x':[12,53,-3,-41], 'y':[74,-45,25,-21], 'z':[-2,-64,-12,65]})

# this is the call
vector(df['x'],df['y'],df['z'])

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in vecSd
TypeError: only length-1 arrays can be converted to Python scalars

我也试图像这样定义函数:

def vector2(df):
    x=df['x']
    y=df['y']
    z=df['z']
    vec=sqrt(pow(x,2)+pow(y, 2)+pow(z, 2))
    return vec

vector2(df)

但我总是得到相同的错误信息:     Traceback(最近一次调用最后一次):       文件“”,第1行,in       文件“”,第5行,在vector2中     TypeError:只能将length-1数组转换为Python标量

我做错了什么?

1 个答案:

答案 0 :(得分:1)

math只接受标量,而不接受数组。请改用numpy

import numpy as np

# my function
def vector(x, y, z):
    vec=np.sqrt(np.power(x,2)+np.power(y,2)+np.power(z,2))
    return vec 

修改

这也适用于numpy数组

def vector(x, y, z):
    vec=np.sqrt(x**2+y**2+z**2)
    return vec