为了运行深度学习模型,我需要将分类值列转换。在训练时,我使用pd.get_dummies(data=data, dummy_na=True)
,效果很好。
但在实时环境中,如预期的那样,每列都会出现一些新的类别。因此,我需要为所有这些类别设置一个’column_name_nan’。由于get_dummies不提供这种功能,我自己编写了代码。我将训练时的列保存到文件中,并在预测时使用这些列。但对于像100万条数据这样的大数据,这需要很多时间。以下是我的代码。
def populate_data_frame_in_prediction_time(data, columns): unknown_col = "nan" columns_set = set(columns) result_data_frame = pd.DataFrame(0, index=np.arange(len(data)), columns=columns) for prefix in data.columns: # O(m) unknown_column_name = str(prefix) + "_" + str(unknown_col) for index, row in data.iterrows(): #O(n) value = row[prefix] result_column_name = str(prefix) + "_" + str(value) if result_column_name not in columns_set: # O(1) result_column_name = unknown_column_name result_data_frame[result_column_name][index] = 1 result_data_frame = result_data_frame.astype('uint8') return result_data_frame
你们有更好的解决方案吗?
假设
training_data = pd.DataFrame({'City': ['Delhi', None, 'Hyderabad', 'Delhi', 'Hyderabad'], 'Country': ['D', 'H', 'D', 'H', None]}) real_time_data = pd.DataFrame({'City': ['Delhi', None, 'Dhaka'], # }) 'Country': [None, "H", "B"]}) #encoded_columns_in_training_time_to_use_it_on_prediction_time{'City': ['City_Delhi', 'City_Hyderabad', 'City_nan'], 'Country': ['Country_D', 'Country_H', 'Country_nan']}
回答:
最后,我解决了我的问题。以下是详细信息。https://dev.to/imsazzad/populate-data-frame-faster-from-4-hours-to-15-second-557e