Pandas
Что быстрее для числового DataFrame: df**2 или df.apply(lambda x: x**2), и почему?
Использование операции df**2 будет быстрее, чем df.apply(lambda x: x**2), потому что операция df**2 векторизована и выполняется нативно на массивах NumPy, в то время как apply применяет функцию к каждой строке или столбцу отдельно, что менее эффективно.
Какая концепция эффективного Pandas? Как хорошо и красиво писать код на Pandas?
Концепция эффективного использования Pandas включает следующие аспекты:
-
Векторизация операций: Используйте встроенные методы Pandas для выполнения операций на всем DataFrame или Series одновременно, избегая явных циклов Python.
-
Использование методов работы с данными: Вместо циклов Python используйте методы Pandas, такие как
apply(),map(),groupby()и др., для выполнения операций над данными более эффективно. -
Оптимизация работы с памятью: Используйте различные методы для уменьшения потребления памяти, такие как использование более компактных типов данных, удаление ненужных столбцов или строк и загрузка данных порциями при необходимости.
-
Использование индексации и селекции: Используйте индексацию и селекцию для эффективного доступа к данным, избегая использования циклов и лишних операций копирования.
-
Применение эффективных алгоритмов: Используйте оптимизированные алгоритмы Pandas для выполнения сложных операций, таких как слияние таблиц, объединение и группировка данных.
-
Обработка пропущенных данных: Используйте методы Pandas для обработки пропущенных данных, такие как
fillna(),dropna()иinterpolate(), чтобы гарантировать целостность и точность анализа. -
Использование цепочек методов (method chaining): Используйте цепочки методов для создания более компактного и читаемого кода, избегая лишних промежуточных переменных.
Как работают в Pandas’е методы: assign, pipe?
Метод assign() в Pandas используется для создания новых столбцов в DataFrame на основе существующих данных. Он принимает именованные аргументы в виде выражений или функций, которые определяют значения новых столбцов. Метод возвращает новый DataFrame с добавленными столбцами.
import pandas as pd
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df_new = df.assign(C=df['A'] + df['B'], D=lambda x: x['A'] * 2)
pipe() передаёт DataFrame одной функции вместе с дополнительными аргументами и возвращает её результат, который может иметь любой тип. Последовательность функций строят цепочкой вызовов .pipe(f).pipe(g).
Например:import pandas as pd
def square_and_sum(df):
df['A'] = df['A'] ** 2
df['B'] = df['B'] ** 2
return df.sum()
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
result = df.pipe(square_and_sum)
Какой аналог LEFT JOIN в Pandas, если хотим пару DataFrame объединить?
В Pandas аналогом операции LEFT JOIN является метод merge(), который позволяет объединять два DataFrame по заданным ключам, сохраняя все строки из левого DataFrame и соответствующие строки из правого DataFrame, если ключи совпадают.
import pandas as pd
df1 = pd.DataFrame({'key': ['A', 'B', 'C'], 'value': [1, 2, 3]})
df2 = pd.DataFrame({'key': ['A', 'B', 'D'], 'value': [4, 5, 6]})
result = pd.merge(df1, df2, on='key', how='left')
В этом примере df1 и df2 объединяются по ключу 'key', и результатом будет DataFrame, содержащий все строки из df1 и только соответствующие им строки из df2.