#python #pandas #matrix
#python #pandas #матрица
Вопрос:
Следующий скрипт преобразует несколько квадратных матриц в фреймы данных pandas, сначала вручную, затем в виде функции цикла, а также помечает их строки и столбцы одинаково.
import numpy as np
import pandas as pd
from numpy.random import rand
A1 = rand(3,3)
A2 = A1*2
A3 = A1*3 #example square matrices, no math pattern implied
labels = ['a','b','c']
Ручное преобразование:
A1 = pd.DataFrame(A1, index=labels, columns=labels)
A2 = pd.DataFrame(A2, index=labels, columns=labels)
A3 = pd.DataFrame(A2, index=labels, columns=labels)
Пакетное преобразование (цикл):
def batch_df(l):
ll = []
for A in l:
A_ = pd.DataFrame(A, index=labels, columns=labels)
ll.append(A_)
return ll
ll = batch_df([A1, A2, A3])
print(len(ll)) #list of unnamed matrices, but I would like them separately : A1, A2, ...
Вместо этого я хотел бы возвращать отдельные фреймы данных отдельно, с уникальными именами, а не объединять их в один список без имен, но не знаю, как это сделать:
return A1, A2, A3
Функция должна быть достаточно гибкой для пакетного преобразования любого количества массивов, передаваемых в функцию, а не только 3
Ответ №1:
def batch_df(l):
...
return ll
# edit the expected return values
A1, A2, A3 = batch_df([A1, A2, A3])
(я не совсем понимаю ваш вопрос)
или
import numpy as np
import pandas as pd
from numpy.random import rand
my_dfs = {}
my_dfs['A1'] = rand(3,3)
my_dfs['A2'] = my_dfs['A1'] * 2
my_dfs['A3'] = my_dfs['A1'] * 3
labels = ['a','b','c']
#----------#
# Do stuff #
#----------#
def batch_df(d):
# loop over the dataframes
for k, A in d.items():
# update the value
my_dfs[k] = pd.DataFrame(A, index=labels, columns=labels)
# no need to return --> dictionaries are by reference
batch_df(my_dfs)
res: my_dfs[‘A1’]
a b c
a 0.501693 0.506768 0.315132
b 0.382843 0.116506 0.194385
c 0.208627 0.033067 0.121261
Комментарии:
1.
ll
в вопросе указан список. но внутри этого списка находятся отдельные объекты. создание вывода функцииll
само по себе дает только один вывод. Вместо этого я хотел бы вывести 3 или более объектов из функции, распакованных из содержимогоll
2. но если вы предоставите равное количество ожидаемых значений -> A1, A2, A3 = < — тогда реальной проблемы нет?
3. или эта сумма неизвестна?
4. Почему вы не используете словарь?
5. код до внесения изменений работал нормально, я только отвечал на ваш вопрос о непонимании