0

私はPythonとパンダの両方にまったく慣れていないので、何かが足りないかもしれませんが、Web上で問題の解決策を見つけることができませんでした。パンダのデータフレームの3列にわたって行ごとに値を要約するために適用する必要がある関数を実行しようとしています。タスクはここで説明したものとまったく同じです。ただし、提案されたソリューションでは、常にエラーが発生します。

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)

しかし、私は常に同じエラーメッセージを受け取ります:トレースバック(最後の最後の呼び出し):ファイル ""、1行目、ファイル ""、5行目、vector2 TypeError:長さ1の配列のみをPythonスカラーに変換できます

私は何が間違っているのですか?

4

1 に答える 1

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 
于 2013-02-22T11:07:22.663 に答える