[Освоение Python за 100 дней] Day59: Анализ данных Python_Расширенные функции Pandas — создание многоуровневого индекса, доступ к операциям нарезки и изменения формы, пользовательские функции pandas и функции сопоставления

Оглавление

1 Многоуровневый индекс (MultiIndex)

1.1 Создайте многоуровневый индекс

1.1.1 Создание многоуровневых индексов из кортежей

1.1.2 Используйте метод set_index() для создания многоуровневого индекса

1.2 Доступ к данным многоуровневого индекса

1.3 Иерархическое разделение многоуровневых индексов

1.4 Изменение формы многоуровневых индексов

2 Пользовательские функции и отображение

2.1. Используйте метод apply() для выполнения операций с пользовательскими функциями.

2.2. Используйте метод map() для операций сопоставления.

2.3. Использование метода applymap() для выполнения пользовательских функций на уровне элемента.

3 общих совета и операции по оптимизации производительности Pandas


1 Многоуровневый индекс (MultiIndex)

        Многоуровневый индекс Pandas (MultiIndex) позволяет вам иметь несколько иерархических индексов в строках или столбцах DataFrame, что позволяет обрабатывать более сложные структуры данных, такие как многомерные данные временных рядов или данные с иерархическими структурами. Вот подробные инструкции и примеры многоуровневого индексирования:

1.1 Создайте многоуровневый индекс

        Вы можете создавать многоуровневые индексы различными способами, в том числе из кортежей, списков или массивов или с помощью set_index()метода установки. Вот некоторые примеры:

1.1.1 Создание многоуровневых индексов из кортежей

import pandas as pd

# 从元组创建多层索引
index = pd.MultiIndex.from_tuples([('A', 1), ('A', 2), ('B', 1), ('B', 2)], names=['Label1', 'Label2'])

# 创建带多层索引的DataFrame
data = {'Values': [10, 20, 30, 40]}
df = pd.DataFrame(data, index=index)
print(df)

1.1.2 Использование set_index()метода для создания многоуровневого индекса

import pandas as pd

# 创建一个普通的DataFrame
data = {'Label1': ['A', 'A', 'B', 'B'],
        'Label2': [1, 2, 1, 2],
        'Values': [10, 20, 30, 40]}
df = pd.DataFrame(data)

# 使用set_index()方法将列转换为多层索引
df.set_index(['Label1', 'Label2'], inplace=True)
print(df)

1.2 Доступ к данным многоуровневого индекса

Вы можете использовать .loc[]этот метод для доступа к данным в многоуровневом индексе. Предоставляя метки на нескольких уровнях индекса, вы можете выбрать именно те данные, которые вам нужны. Вот некоторые примеры:

# 访问指定多层索引的数据
print(df.loc['A'])  # 访问Label1为'A'的所有数据
print(df.loc['A', 1])  # 访问Label1为'A'且Label2为1的数据

1.3 Иерархическое разделение многоуровневых индексов

Вы можете использовать операции среза для выбора подмножества данных в многоуровневом индексе. следующее:

# 切片操作:选择Label1为'A'到'B'的数据
print(df.loc['A':'B'])

# 切片操作:选择Label1为'A'且Label2为1到2的数据
print(df.loc['A', 1:2])

1.4 Изменение формы многоуровневых индексов

Вы можете использовать методы .stack()и .unstack()для изменения формы данных с помощью нескольких уровней индексов. .stack()Метки столбцов можно преобразовать в уровни индекса, а .unstack()уровни индекса можно преобразовать в метки столбцов. следующее:

# 使用stack()方法将列标签转换为索引级别
stacked_df = df.stack()

# 使用unstack()方法将索引级别转换为列标签
unstacked_df = stacked_df.unstack()

Это основные инструкции и примеры многоуровневого индексирования Pandas. Многоуровневые индексы — важный инструмент для обработки сложных данных, позволяющий более гибко организовывать данные и получать к ним доступ. Вы можете выбрать способ использования многоуровневых индексов в зависимости от характеристик и потребностей ваших данных.

2 Пользовательские функции и отображение

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

2.1 Используйте apply()метод для выполнения операций с пользовательскими функциями

  apply()Методы можно использовать для применения пользовательских функций к строкам или столбцам DataFrame. Вы можете применить функцию к столбцу или ко всему DataFrame. Вот примеры:

import pandas as pd

# 创建一个示例DataFrame
data = {'A': [1, 2, 3, 4],
        'B': [10, 20, 30, 40]}
df = pd.DataFrame(data)

# 自定义函数,将A列的值加倍
def double(x):
    return x * 2

# 使用apply()将自定义函数应用到A列
df['A_doubled'] = df['A'].apply(double)

print(df)

Выход: 

 

2.2 Использование map()метода для выполнения операций сопоставления

  map()Этот метод можно использовать для сопоставления значения одной серии со значением другой серии, обычно используемой для замены или сопоставления значения определенного столбца. Вот примеры:

import pandas as pd

# 创建一个示例DataFrame
data = {'A': ['foo', 'bar', 'baz'],
        'B': [1, 2, 3]}
df = pd.DataFrame(data)

# 创建一个字典来映射A列的值
mapping = {'foo': 'apple', 'bar': 'banana', 'baz': 'cherry'}

# 使用map()将A列的值映射为新的值
df['A_mapped'] = df['A'].map(mapping)

print(df)

Выход: 

2.3. Использование для applymap()выполнения пользовательских функций на уровне элемента.

    applymap()Метод используется для применения пользовательской функции к каждому элементу DataFrame. Это операция на уровне элемента, которая применяется ко всему DataFrame. Вот примеры:

import pandas as pd

# 创建一个示例DataFrame
data = {'A': [1, 2, 3],
        'B': [4, 5, 6]}
df = pd.DataFrame(data)

# 自定义函数,将每个元素乘以2
def double(x):
    return x * 2

# 使用applymap()将自定义函数应用到整个DataFrame
df_doubled = df.applymap(double)

print(df_doubled)

Выход: 

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

3 общих совета и операции по оптимизации производительности Pandas

         Оптимизация производительности Pandas — важная тема, особенно когда вы имеете дело с крупномасштабными наборами данных. Вот несколько общих предложений и советов по улучшению производительности Pandas:

  1. Выберите правильную структуру данных: в Pandas есть две основные структуры данных: DataFrame и Series. Обязательно выберите структуру, которая лучше всего соответствует вашим данным. Например, если вам нужно обрабатывать только одномерные данные, использование Series более эффективно, чем DataFrame.

  2. Избегайте использования циклов. Старайтесь избегать использования явных циклов для обработки данных, поскольку они часто медленнее, чем встроенные векторизованные операции Pandas. Используйте встроенные функции и методы Pandas, такие как apply(), map()и groupby()для замены операций цикла.

  3. Доступ к элементам с помощью atи iat. Если вам нужен доступ только к одному элементу, а не ко всей строке или столбцу, используйте методы .at[]и .iat[], они работают быстрее, чем .loc[]и .iloc[].

  4. Нарезка с помощью и . Использование .loc[]и.iloc[] позволяет .loc[]ускорить .iloc[]нарезку и индексацию, избегая копирования данных. Индексирование с использованием .loc[]и.iloc[] : используйте индексаторы .loc[]и .iloc[]для доступа к данным, что []более эффективно, чем прямое использование квадратных скобок, особенно когда вам нужно выбрать несколько строк или столбцов.

  5. Установите параметры памяти соответствующим образом. Установив параметры памяти Pandas, такие как pd.set_option('max_rows', None)и pd.set_option('max_columns', None), вы можете контролировать максимальное количество отображаемых строк и столбцов. Это помогает предотвратить отображение больших объемов данных в больших наборах данных.

  6. Оптимизация слияния и соединения: используйте соответствующие методы слияния и соединения, такие как pd.merge()и pd.concat(), и используйте такие параметры, как on, howи для оптимизации операции.suffixes

  7. Используйте соответствующие типы данных: попробуйте использовать astype()метод, чтобы явно указать тип данных, а не позволять Pandas автоматически определять его. Это уменьшает использование памяти и повышает производительность. Pandas автоматически выбирает тип данных для каждого столбца, но вы можете явно указать тип данных, чтобы уменьшить использование памяти и повысить производительность. Преобразуйте столбец в правильный тип данных, используя pd.to_numeric()такие методы, как .pd.to_datetime()

  8. Используйте хранилище HDF5. Для больших наборов данных рассмотрите возможность хранения данных в формате HDF5 для быстрого чтения и записи данных.

  9. Используйте параметры соответствующим образом inplace. В Pandas многие методы по умолчанию не изменяют исходные данные, а возвращают новый объект. Если вы уверены, что хотите работать с необработанными данными без создания новых объектов, вы можете использовать inplace=Trueпараметры для экономии памяти и повышения производительности.

  10. Параллельная обработка. Для больших наборов данных рассмотрите возможность использования параллельных вычислений для ускорения обработки данных. Pandas предоставляет multiprocessingбиблиотеки для реализации параллельной обработки.

Supongo que te gusta

Origin blog.csdn.net/qq_35831906/article/details/132755913
Recomendado
Clasificación