DrugDesign Data Analysis
Module of the DrugDesign project responsible for loading and pre-processing data from ChEMBL and PubChem
All Classes Namespaces Files Functions Variables Pages
dataframe_funcs Namespace Reference

Functions

list DedupedList (list list_name)
 
pd.DataFrame MedianDedupedDF (pd.DataFrame df, str id_column_name, str median_column_name)
 
list NonNoneList (list list_name)
 

Detailed Description

Utils/dataframe_funcs.py Этот модуль содержит набор функций для работы с pandas DataFrames, включая удаление None, дубликатов и вычисление медиан.

Function Documentation

◆ DedupedList()

list dataframe_funcs.DedupedList ( list list_name)
Убирает все дубликаты и None из списка. Args: list_name (list): исходный список. Returns: list: список без None и дубликатов.
27def DedupedList(list_name: list) -> list:
28 """
29 Убирает все дубликаты и None из списка.
30
31 Args:
32 list_name (list): исходный список.
33
34 Returns:
35 list: список без None и дубликатов.
36 """
37
38 try:
39 # пытаемся создать список уникальных элементов из списка,
40 # предварительно удалив None.
41 return list(set(NonNoneList(list_name)))
42
43 # если возникла ошибка (например, список содержит словари).
44 except Exception:
45 # https://stackoverflow.com/questions/9427163/remove-duplicate-dict-in-list-in-python
46 # удаляем дубликаты из списка словарей.
47 return list(
48 {frozenset(item.items()): item for item in NonNoneList(list_name)}.values()
49 )
50
51
Here is the call graph for this function:

◆ MedianDedupedDF()

pd.DataFrame dataframe_funcs.MedianDedupedDF ( pd.DataFrame df,
str id_column_name,
str median_column_name )
Удаляет дубликаты в колонке идентификаторов элементов DataFrame, заменяя их медианой соответствующих значений в колонке median_column_name. Сохраняет значения из всех остальных столбцов в списки, если они различны, иначе - одиночными элементами. Args: df (pd.DataFrame): исходный DataFrame. id_column_name (str): имя колонки, содержащей идентификаторы. median_column_name (str): имя колонки, в которой нужно посчитать медианы. Returns: pd.DataFrame: DataFrame с удаленными дубликатами и списками в остальных столбцах.
54) -> pd.DataFrame:
55 """
56 Удаляет дубликаты в колонке идентификаторов элементов DataFrame, заменяя их
57 медианой соответствующих значений в колонке median_column_name.
58
59 Сохраняет значения из всех остальных столбцов в списки,
60 если они различны, иначе - одиночными элементами.
61
62 Args:
63 df (pd.DataFrame): исходный DataFrame.
64 id_column_name (str): имя колонки, содержащей идентификаторы.
65 median_column_name (str): имя колонки, в которой нужно посчитать
66 медианы.
67
68 Returns:
69 pd.DataFrame: DataFrame с удаленными дубликатами и списками в
70 остальных столбцах.
71 """
72
73 median_and_id_data: dict = {}
74
75 # значения в столбце, где будут медианы - должно быть типа float.
76 df.loc[:, median_column_name] = df[median_column_name].astype(float)
77
78 name_values_dict: dict[str, float | list]
79
80 # итерируемся по уникальным значениям в колонке идентификаторов.
81 for name in df[id_column_name].unique():
82 # создаем подмножество DataFrame для текущего идентификатора.
83 name_subset_df: pd.DataFrame = df.loc[df[id_column_name] == name]
84
85 # создаем словарь для хранения данных по данному имени.
86 name_values_dict = {median_column_name: name_subset_df[median_column_name].median()}
87
88 # добавляем списки значений для остальных столбцов.
89 for col in name_subset_df.columns:
90 # исключаем колонку median_column_name.
91 if col not in (median_column_name, id_column_name):
92 try:
93 # пытаемся создать список уникальных значений.
94 name_values_dict[col] = DedupedList(name_subset_df[col].tolist())
95
96 # если возникла ошибка, создаем список без None.
97 except TypeError:
98 name_values_dict[col] = NonNoneList(name_subset_df[col].tolist())
99
100 # если в списке 1 элемент, то список бесполезен.
101 if len(name_values_dict[col]) == 1:
102 name_values_dict[col] = name_values_dict[col][0]
103
104 def IsAllNan(list_name: list) -> bool:
105 """
106 Проверяет, состоит ли список только из значений "nan".
107
108 Args:
109 list_name (list): список, который нужно проверить.
110
111 Returns:
112 bool: True, если все элементы списка равны "nan".
113 """
114
115 return all(str(elem) == "nan" for elem in list_name)
116
117 # если в списке нет элементов, или они все == "nan",
118 # то это не список.
119 if isinstance(name_values_dict[col], list):
120 if len(name_values_dict[col]) == 0 or IsAllNan(name_values_dict[col]):
121 name_values_dict[col] = None
122
123 # сохраняем данные для данного имени.
124 median_and_id_data[name] = name_values_dict
125
126 # новый pd.DataFrame с уникальными значениями id_column_name и
127 # соответствующими данными.
128 new_df = pd.DataFrame.from_dict(median_and_id_data, orient="index").reset_index()
129
130 # переименовываем столбец с идентификаторами.
131 new_df = new_df.rename(columns={"index": id_column_name})
132
133 return new_df
Here is the call graph for this function:

◆ NonNoneList()

list dataframe_funcs.NonNoneList ( list list_name)
Убирает все None из списка. Args: list_name (list): исходный список. Returns: list: список без None.
13def NonNoneList(list_name: list) -> list:
14 """
15 Убирает все None из списка.
16
17 Args:
18 list_name (list): исходный список.
19
20 Returns:
21 list: список без None.
22 """
23
24 return list(filter(None, list_name))
25
26
Here is the caller graph for this function: