Функция Python не вызывает данный аргумент для каждой итерации во внутреннем цикле - PullRequest
0 голосов
/ 11 октября 2018

Я написал этот код:

class_1500_strings = ['transistor', 'resistor', 'diode', 'processor', 'thermistor', '555-timer', 'microcontroller']

class_1500 = {'conductivity' : gaussian_sample(100, 10, 250),
              'price_per_unit' : gaussian_sample(10, 2, 250),
              'number_bought' : categorical_sample(0, 10, 250),
              'manufacturer' : string_sample(250, class_1500_strings),
              'acquisition_date' : date_random_sample("1/1/2008 1:30 PM", "1/1/2009 4:50 AM", col_length=250),
              'runtime' : gaussian_sample(1000, 200, 250)

def generate_table(class_dict, class_label, number_of_samples):
    X, y = [], []
    for table_idx in range(number_of_samples):
        df = pd.DataFrame(class_dict)
        label = class_label
        X.append(df)
        y.append(label)
    return X, y

X, y = generate_table(class_1500, 0, 5)

Цель состоит в том, чтобы создать образцы искусственных фреймов данных.У меня проблема в том, что X - это список идентичных фреймов данных вместо вызова случайных генераторов внутри словаря классов.Как я могу заставить функцию создавать список различных наборов данных (т.е. вызывать сэмплеры при каждом запуске цикла)?

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Вы строите DataFrame, используя одно и то же значение в каждой итерации цикла (class_dict).Если вы хотите, чтобы значение DataFrame было разным для каждой итерации, вам нужно будет указать другое значение.Попробуйте обновить цикл for на for key in class_dict, а для аргумента DataFrame укажите key.

. Это позволит создать один DataFrame для каждого ключа вашего словаря, где значенияDataFrames генерируются значениями словарных ключей (примеры функций).

0 голосов
/ 11 октября 2018

Вам необходимо создать новый словарь для каждого построенного вами кадра данных.С вашей текущей логикой, как только определено class_1500, оно потеряло всю связь с логикой генератора случайных чисел, поскольку все значения подобны массиву.

Один из способов - определить отдельную функцию, которая дает разныемассивы каждый раз при запуске:

def make_data():
     return {'conductivity' : gaussian_sample(100, 10, 250),
             ...
             'runtime' : gaussian_sample(1000, 200, 250)}

def generate_table(class_label, number_of_samples):
    X, y = [], []
    for table_idx in range(number_of_samples):
        df = pd.DataFrame(make_data())
        label = class_label
        X.append(df)
        y.append(label)
    return X, y

X, y = generate_table(0, 5)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...