Преобразуйте все строки фрейма данных в массивы и перейдите к функции

Я хочу преобразовать все строки фрейма данных в массивы и использовать массивы в функции. Функция должна создать новый столбец с результатами функции для каждой строки.

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)

Можете ли вы предоставить больше информации? как образец данных (может быть df.head()), что вы пробовали и что вы хотите получить

Terry 08.04.2019 18:18
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
1
660
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

вы можете использовать встроенные методы .iloc и .to_list(), чтобы получить строки в виде массива и передать их вашему методу.

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

df.values ​​даст numpy ndarray.. это может повторяться по строке.. таким образом быстрее..

Bhanu Tez 08.04.2019 18:22

@nickthefreak спасибо! это сработало. Однако я получаю эту ошибку: ZeroDivisionError: («деление с плавающей запятой на ноль», «произошло с индексом 0»), поскольку строки также содержат нули. Любая идея, как игнорировать нулевые значения и значения Nan при вычислении среднего гармонического значения?

Jagruthi C 08.04.2019 18:28

Я не могу сказать, возникает ли ошибка деления на ноль при делении на элемент или при делении на сумму; вероятно, может произойти для любого из подразделений. Вероятно, вам нужно добавить оператор if, проверяющий, что элемент и сумма больше 0 перед делением

nickthefreak 08.04.2019 18:34

я пробовал это, я получаю эту ошибку: row_lst = data1.iloc[i].to_list() File "C:\Users\Pinky\AppData\Local\Programs\Python\Python37-32\li‌​b\site- пакеты\pand‌​as\core\generic.py", строка 4376, в возвращаемом объекте getattr.__getattribute__(self, name) AttributeError: объект "Series" не имеет атрибута "to_list"

Jagruthi C 08.04.2019 18:43
Ответ принят как подходящий

Вы можете рассчитать, не перебирая строки:

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

Привет! спасибо за ответ, я получаю 1 ошибку, которую я не понимаю. Пишет: Не удалось оперировать 1 со значениями блока с плавающим делением на ноль. Вы знаете, что это значит?

Jagruthi C 08.04.2019 18:46

@JagruthiC Я не совсем уверен. Это может быть проблема деления на 0, хотя я не могу воспроизвести эту проблему на своем конце, так как это, похоже, обрабатывает все строки NaN и 0/NaN или #/0 на моем конце.

ALollz 08.04.2019 18:57

Другие вопросы по теме