Python 将数据帧的所有行转换为数组并传递给函数

Python 将数据帧的所有行转换为数组并传递给函数,python,pandas,dataframe,Python,Pandas,Dataframe,我想将数据帧的所有行转换为数组,并在函数中使用这些数组。函数应该为每一行创建一个包含函数结果的新列 def harmonicMean(arr): sum = 0; for item in arr: sum = sum + float(1.0/item); print "inside" + str(float(1.0/item)); print sum; return float(len(arr) / sum); 该函数实际上为数据

我想将数据帧的所有行转换为数组,并在函数中使用这些数组。函数应该为每一行创建一个包含函数结果的新列

def harmonicMean(arr):
    sum = 0;
    for item in arr:
        sum = sum + float(1.0/item);
        print "inside" + str(float(1.0/item));
    print sum;
    return float(len(arr) / sum);

该函数实际上为数据帧中的每一行生成调和平均值。这些值应填充到数据框中的新列中。(数据框还包含
Nan
值)

您可以使用内置的
.iloc
.to_list()
方法将行作为数组获取并传递给您的方法

rows = df.shape[0]
for i in range(rows):
    row_lst = df.iloc[i].to_list()
    print(harmonicMean(row_lst))

您可以在不迭代行的情况下进行计算:

df['hmean'] = df.notnull().sum(axis=1)/(1/df).sum(axis=1)

   a    b    c     d   e     hmean
0  4  5.0  2.0   5.0  10  4.000000
1  2  8.0  1.0   8.0   6  2.608696
2  7  NaN  1.0   1.0   8  1.763780
3  7  1.0  9.0   4.0   9  3.095823
4  8  5.0  8.0   NaN   3  5.106383
5  3  8.0  6.0  10.0   6  5.607477
6  3  7.0  3.0   9.0   9  4.846154
7  8  NaN  NaN   NaN   6  6.857143
8  2  4.0  1.0   5.0   2  2.040816
9  5  7.0  5.0   3.0   1  2.664975

你能提供更多的信息吗?作为数据样本(可以是
df.head()
),您尝试了什么以及希望输出什么。df.values将给出numpy ndarray。。这可以是一排排。。这样更快…@nickthefreak谢谢!成功了。但是我得到了这个错误:ZeroDivisionError:('float division by zero','occurrent at index 0'),因为行也包含零。知道在计算调和平均值时如何忽略零和Nan值吗?我不知道零除误差是在按项除时还是在按和除时;可能发生在任何一个部门。在Dividigi尝试之前,您可能需要添加一个if语句来检查项和总和是否大于0,我得到的错误是:row_lst=data1.iloc[i]。在getattr返回对象的第4376行中,将其添加到_list()文件“C:\Users\Pinky\AppData\Local\Programs\Python37-32\lib\site packages\pandages\core\generic.py”__(自我、姓名)AttributeError:“Series”对象没有“to_list”属性您好!谢谢您的回答,我得到了一个我不理解的错误。它说:无法使用块值浮点除零操作1。您知道这意味着什么吗?@JagruthiC我不太确定。这可能是一个除以0的问题,尽管我无法复制这个问题,因为这似乎是我自己的问题s处理所有NaN行和我端的0/NaN或#/0。