О Pandas: малоизвестные функции и ошибки, которые следует избегать

В этой статье мне бы хотелось поговорит о библиотеке для обработки и анализа данных на Python – Pandas. А если быть конкретнее, то о малоизвестных функциях, которые смогут расширить ваш кругозор, и об ошибках, которые следует избегать во время работы с этой библиотекой!

Data Science функции, которые вам следует знать

1.melt() – эта функция используется для преобразования широкого фрейма данных в один длинный. Её можно использовать для упрощения анализа данных или изменения формы данных для построения графиков.

import pandas as pd
df = pd.DataFrame({'A': {0: 'foo', 1: 'bar', 2: 'baz'},
                   'B': {0: 1, 1: 2, 2: 3},
                   'C': {0: 4, 1: 5, 2: 6}})
df_melted = pd.melt(df, id_vars=['A'], value_vars=['B', 'C'], var_name='Variable', value_name='Value')
print(df_melted)

Вывод:

A Variable  Value
0  foo        B      1
1  bar        B      2
2  baz        B      3
3  foo        C      4
4  bar        C      5
5  baz        C      6

2. pivot() – эта функция используется для преобразования длинного фрейма данных в широкий. Её можно использовать для упрощения анализа данных или изменения формы данных для построения графиков.

df = pd.DataFrame({'A': {0: 'foo', 1: 'bar', 2: 'baz'},
                   'B': {0: 1, 1: 2, 2: 3},
                   'C': {0: 4, 1: 5, 2: 6}})
df_pivoted = df.pivot(index='A', columns='B', values='C')
print(df_pivoted)

Вывод:

B    1  2  3
A           
bar  5  6  7
baz  8  9  10
foo  2  3  4

3. query() – эта функция используется для фильтрации фрейма данных с использованием строки запроса. Это похоже на логическое индексирование, но может быть более удобным для сложной фильтрации.

df = pd.DataFrame({'A': {0: 'foo', 1: 'bar', 2: 'baz'},
                   'B': {0: 1, 1: 2, 2: 3},
                   'C': {0: 4, 1: 5, 2: 6}})
df_filtered = df.query('B > 1 and C > 5')
print(df_filtered)

Вывод:

A  B  C
2  baz  3  6

4. explode() – Эта функция используется для преобразования столбца списков или массивов в несколько строк, с одной строкой для каждого элемента в списке или массиве.

df = pd.DataFrame({'A': {0: 'foo', 1: 'bar', 2: 'baz'},
                   'B': {0: [1, 2], 1: [3, 4, 5], 2: [6]},
                   'C': {0: 4, 1: 5, 2: 6}})
df_exploded = df.explode('B')
print(df_exploded)

Вывод:

A  B  C
0  foo  1  4
0  foo

5. pd.cut() – эта функция используется для разбиения значений на дискретные интервалы. Это может быть полезно для создания категориальных переменных или группировки непрерывных данных.

df = pd.DataFrame({'A': {0: 'foo', 1: 'bar', 2: 'baz'},
                   'B': {0: 1, 1: 2, 2: 3},
                   'C': {0: 4, 1: 5, 2: 6}})
df['B_binned'] = pd.cut(df['B'], bins=[0, 1.5, 2.5, 3.5], labels=['low', 'medium', 'high'])
print(df)

Вывод:

A  B  C B_binned
0  foo  1  4      low
1  bar  2  5   medium
2  baz  3  6     high

6. pd.qcut() – Эта функция используется для объединения значений в дискретные квантили. Это может быть полезно для создания категориальных переменных или группировки непрерывных данных.

df = pd.DataFrame({'A': {0: 'foo', 1: 'bar', 2: 'baz'},
                   'B': {0: 1, 1: 2, 2: 3},
                   'C': {0: 4, 1: 5, 2: 6}})
df['C_quantile'] = pd.qcut(df['C'], q=3, labels=['low', 'medium', 'high'])
print(df)

Вывод:

A  B  C C_quantile
0  foo  1  4        low
1  bar  2  5     medium
2  baz  3  6       high

7. nlargest() – эта функция используется для выбора n наибольших значений из столбца или фрейма данных.

df = pd.DataFrame({'A': {0: 'foo', 1: 'bar', 2: 'baz'},
                   'B': {0: 1, 1: 2, 2: 3},
                   'C': {0: 4, 1: 5, 2: 6}})
df_largest = df.nlargest(2, 'B')
print(df_largest)

Вывод:

A  B  C
2  baz  3  6
1  bar  2  5

8. nsmallest() – эта функция используется для выбора n наименьших значений из столбца или фрейма данных.

df = pd.DataFrame({'A': {0: 'foo', 1: 'bar', 2: 'baz'},
                   'B': {0: 1, 1: 2, 2: 3},
                   'C': {0: 4, 1: 5, 2: 6}})
df_smallest = df.nsmallest(2, 'B')
print(df_smallest)

Вывод:

A  B  C
0  foo  1  4
1  bar  2  5

9. merge() – эта функция используется для объединения двух или более фреймов данных в общем столбце.

df1 = pd.DataFrame({'key': ['foo', 'bar', 'baz', 'qux'],
                    'value': [1, 2, 3, 4]})
df2 = pd.DataFrame({'key': ['foo', 'bar', 'baz', 'qux'],
                    'value': [5, 6, 7, 8]})
merged_df = pd.merge(df1, df2, on='key')
print(merged_df)

Вывод:

key  value_x  value_y
0  foo        1        5
1  bar        2        6
2  baz        3        7
3  qux        4        8

10. pivot_table() – Эта функция используется для создания сводной таблицы в стиле электронной таблицы в виде фрейма данных. Она может быть полезна для обобщения данных, агрегирования данных и создания перекрёстных таблиц.

df = pd.DataFrame({'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
                   'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
                   'C': [1, 2, 3, 4, 5, 6, 7, 8],
                   'D': [2, 4, 6, 8, 10, 12, 14, 16]})
pivot_df = pd.pivot_table(df, values='D', index=['A'], columns=['B'], aggfunc='sum')
print(pivot_df)

Вывод:

B   one  three  two
A                 
bar    4     8   18
foo   16    24   16

В приведённом выше примере мы используем функцию pivot_table() для создания нового фрейма данных со строками, сгруппированными по столбцу A, и столбцами, сгруппированными по столбцу B, а значения в новом фрейме данных являются суммой столбца D.

10 ошибок, которые следует избегать

  1. Не проверяется наличие нулевых или отсутствующих значений
    Нулевые или отсутствующие значения являются обычным явлением при анализе данных, и их игнорирование может привести к неточным результатам. В библиотеке Pandas отсутствующие значения часто представляются как NaN или None. Чтобы проверить наличие отсутствующих значений в фрейме данных Pandas, вы можете использовать метод isnull(). Аналогично, вы можете использовать метод notnull() для проверки отсутствия пропущенных значений. Всегда полезно проверять наличие нулевых значений, прежде чем выполнять какой-либо анализ или манипуляции с вашими данными.
  2. Изменение данных сразу во время работы
    Фреймы данных Pandas изменяемы, что означает, что вы можете изменять их сразу во время работы. Однако изменение данных сразу во время работы может быть рискованным, особенно если вы работаете с большими наборами данных. Вместо этого рекомендуется создать копию фрейма данных, прежде чем вносить какие-либо изменения. Вы можете использовать метод copy() для создания копии фрейма данных.
  3. Использование циклов вместо векторизации
    Pandas предоставляет мощный набор инструментов для векторизованных операций, которые могут выполняться намного быстрее, чем при использовании циклов. Использование циклов для итерации по фрейму данных Pandas может быть медленным и неэффективным, особенно для больших наборов данных. Вместо этого попробуйте использовать векторизованные операции, которые могут выполнять одну и ту же операцию сразу для всего столбца или фрейма данных.
  4. Использование неправильного типа данных
    Выбор правильного типа данных для ваших данных имеет решающее значение для эффективного и точного анализа. Например, использование строкового типа данных для числовых данных может привести к неожиданным результатам. Pandas предоставляет множество типов данных, включая float, int, bool и object. Убедитесь, что вы выбрали правильный тип данных, чтобы избежать неожиданного поведения.
  5. Неправильное использование groupby
    Группировка данных с использованием метода groupby() является мощным инструментом в Pandas, но им также легко злоупотреблять. Одной из распространённых ошибок является группирование по столбцу, содержащему нулевые значения, что может привести к неожиданным результатам. Ещё одна ошибка заключается в использовании неправильной функции агрегирования, что также может привести к неверным результатам. Убедитесь, что вы понимаете, как работает groupby(), прежде чем использовать его.
  6. Неправильный метод объединения фреймов данных
    Объединение фреймов данных в Pandas может быть выполнено с использованием нескольких методов, включая merge(), concat() и join(). Каждый метод имеет свой собственный вариант использования, и использование неправильного метода может привести к неожиданным результатам. Например, concat() используется для объединения фреймов данных вдоль заданной оси, в то время как merge() используется для объединения фреймов данных в указанном столбце или индексе.
  7. Не сбрасывать индекс
    Фреймы данных Pandas имеют индекс, который используется для обозначения и идентификации строк в фрейме данных. При выполнении операций с фреймом данных важно сбросить индекс, чтобы избежать неожиданного поведения. Вы можете использовать метод reset_index() для сброса индекса фрейма данных.
  8. Отказ от обработки дубликатов
    Дублирующиеся данные могут встречаться в фреймах данных Pandas, и отсутствие обработки дубликатов может привести к неправильным результатам. Pandas предоставляет метод duplicated() для идентификации дублированных строк во фрейме данных. Чтобы удалить дубликаты, вы можете использовать метод drop_duplicates().
  9. Использование слишком большого количества ресурсов памяти
    Работа с большими наборами данных в Pandas может отнимать много памяти, а использование слишком большого количества ресурсов памяти может замедлить ваш рабочий процесс или привести к сбою вашей программы. Чтобы оптимизировать использование памяти, вы можете использовать такие методы, как выбор только необходимых столбцов, использование соответствующих типов данных и использование параметра chunksize при чтении в больших наборах данных.
  10. Не обрабатываются ошибки или исключения
    При работе с данными важно обрабатывать ошибки или исключения, которые могут возникнуть во время анализа или манипулирования. Например, если столбец содержит нечисловые данные, попытка выполнить математическую операцию над этим столбцом приведёт к ошибке. Для обработки ошибок вы можете использовать инструкции try и except или использовать методы Pandas, такие как fillna(), для замены проблемных данных значением по умолчанию.

Заключение

В этой статье я постарался раскрыть сразу 2 полезные темы, которые будут актуальны для библиотеки Pandas: малоизвестные функции и ошибки, которые следует избегать. Надеюсь, что данная статья окажется информативной и полезной для вас!

+1
3
+1
1
+1
0
+1
3
+1
0

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *