Как убрать грязные имена столбцов Pandas
Данные реального мира беспорядочны. Мы часто получаем данные из нескольких источников с разным форматом именования столбцов, и их стандартизация может быть проблемой. Несмотря на проблему, по-прежнему важно стандартизировать имена столбцов в общем формате на ранней стадии процесса очистки данных, чтобы облегчить последующие задачи. Регулярное выражение обычно используется для очистки запутанных имен столбцов, однако может быть довольно утомительно писать регулярное выражение для покрытия различных запутанных сценариев. В этот момент входит Skimpy.
Skimpy
Skimpy обычно используется для предоставления сводной статистики о переменных в Pandas DataFrame. Однако не это нас сегодня интересует. Менее используемая функция Skimpy — это функция clean_columms
, которая помогает решить проблему беспорядочных имен столбцов Pandas.
Skimpy предоставляет несколько распространенных форматов для стандартизации имен столбцов. В таблице ниже показаны результирующие имена столбцов для разных стилей регистра. Эти стили регистра различаются используемым регистром и разделителем.
Давайте посмотрим, как мы можем использовать skimpy для очистки имени столбца.
Установка:
pip install skimpy
Импорт:
import pandas as pd
from skimpy import clean_columns
Давайте создадим игрушечный набор данных, чтобы увидеть, как работает Skimpy.
columns = ['_Customer__name',
'customer_génder',
'customer age',
'billingAddress',
'delivery** address ',
'item(Description)',
'quantity/Volume',
'total.price']
messy_df = pd.DataFrame(data = [], columns=columns, index=[0])
В нашем игрушечном наборе данных есть общие элементы беспорядочных имен столбцов, включая акценты, разные разделители, регистры и несколько пробелов.
Snake Case
Формат по умолчанию, который стандартизируется skimpy - это snake
стиль регистра. Стиль Snake Case заменяет пробелы и разделители символов подчеркиванием и преобразует все символы в нижний регистр.
clean_df = clean_columns(messy_df)
clean_df.columns.tolist()
>>
['customer_name',
'customer_gender',
'customer_age',
'billing_address',
'delivery_address',
'item_description',
'quantity_volume',
'total_price']
Kebab Case
Стиль kebab case
аналогичен snake
, за исключением того, что вместо подчеркивания используется разделитель тире.
clean_df = clean_columns(messy_df, case = 'kebab')
clean_df.columns.tolist()
>>
['customer-name',
'customer-gender',
'customer-age',
'billing-address',
'delivery-address',
'item-description',
'quantity-volume',
'total-price']
Camel Case
Camel case
стиль использует символы верхнего регистра в качестве разделителя, а первый символ каждой строки находится в нижнем регистре.
clean_df = clean_columns(messy_df, case = 'camel')
clean_df.columns.tolist()
>>
['customerName',
'customerGender',
'customerAge',
'billingAddress',
'deliveryAddress',
'itemDescription',
'quantityVolume',
'totalPrice']
Pascal Case
Стиль pascal
подобен верблюжьему регистру, за исключением того, что первый символ каждой строки находится в верхнем регистре.
clean_df = clean_columns(messy_df, case = 'pascal')
clean_df.columns.tolist()
>>
['CustomerName',
'CustomerGender',
'CustomerAge',
'BillingAddress',
'DeliveryAddress',
'ItemDescription',
'QuantityVolume',
'TotalPrice']
Constant Case
Стиль constant case
использует разделитель подчеркивания и изменяет все символы на верхний регистр.
clean_df = clean_columns(messy_df, case = 'const')
clean_df.columns.tolist()
>>
['CUSTOMER_NAME',
'CUSTOMER_GENDER',
'CUSTOMER_AGE',
'BILLING_ADDRESS',
'DELIVERY_ADDRESS',
'ITEM_DESCRIPTION',
'QUANTITY_VOLUME',
'TOTAL_PRICE']
Замена строки
clean_columns()
также предоставляет возможность заменить строку. Это может быть полезно для исправления неправильно написанных имен столбцов или для переименования столбца в стандартный формат. Например, мы могли бы сократить Address
до Addr
и Description
до Desc
clean_df = clean_columns(messy_df, case = 'pascal', replace = {'Address':'Addr', 'Description':'Desc'})
clean_df.columns.tolist()
>>
['CustomerName',
'CustomerGender',
'CustomerAge',
'BillingAddr',
'DeliveryAddr',
'ItemDesc',
'QuantityVolume',
'TotalPrice']