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({frozenset(item.items()): item for item in
48 NonNoneList(list_name)}.values())
49
50
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[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 = {
87 median_column_name: name_subset_df[median_column_name].median()}
88
89 # добавляем списки значений для остальных столбцов.
90 for col in name_subset_df.columns:
91 # исключаем колонку median_column_name.
92 if col != median_column_name and col != id_column_name:
93 try:
94 # пытаемся создать список уникальных значений.
95 name_values_dict[col] = DedupedList(
96 name_subset_df[col].tolist())
97
98 # если возникла ошибка, создаем список без None.
99 except TypeError:
100 name_values_dict[col] = NonNoneList(
101 name_subset_df[col].tolist())
102
103 # если в списке 1 элемент, то список бесполезен.
104 if len(name_values_dict[col]) == 1:
105 name_values_dict[col] = name_values_dict[col][0]
106
107 def IsAllNan(list_name: list) -> bool:
108 """
109 Проверяет, состоит ли список только из значений "nan".
110
111 Args:
112 list_name (list): список, который нужно проверить.
113
114 Returns:
115 bool: True, если все элементы списка равны "nan".
116 """
117
118 return all(str(elem) == "nan" for elem in list_name)
119
120 # если в списке нет элементов, или они все == "nan",
121 # то это не список.
122 if (isinstance(name_values_dict[col], list)):
123
124 if len(name_values_dict[col]) == 0\
125 or IsAllNan(name_values_dict[col]):
126 name_values_dict[col] = None
127
128 # сохраняем данные для данного имени.
129 median_and_id_data[name] = name_values_dict
130
131 # новый pd.DataFrame с уникальными значениями id_column_name и
132 # соответствующими данными.
133 new_df = pd.DataFrame.from_dict(
134 median_and_id_data, orient="index").reset_index()
135
136 # переименовываем столбец с идентификаторами.
137 new_df.rename(columns={"index": id_column_name}, inplace=True)
138
139 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: