Pandas категория dtypes по словарю игнорируется в read_csv - PullRequest
1 голос
/ 24 апреля 2020

У меня странная проблема при загрузке моего csv с Pandas (версия 1.0.3) и небольшой вопрос о том, как привести к категориальному внутри метода конвертера.

По сути, я хочу преобразовать автоматически некоторые столбцы в категориальные. Для этого я создал словарь с названием столбцов и их типом. Следуя документации, я указал «категорию» как тип. Ну, для одного столбца это работает, а для других нет. Ошибка не отображается. Что может быть причиной? Если бы я попытался преобразовать этот столбец в категорию, и это удалось. Так что это не проблема совместимости.

col_types = {
    'CURRENCY': "category",
    'PRODUCT': "category",
    'PRODUCT_TYPE': "category",
}

def parse_csv(path_location):
    df = pd.read_csv(
    path_location, 
    sep=';',
    engine='c',
    dtype=col_types,
    true_values=['Y', 'y'],
    false_values=['N', 'n'],
    converters=converters,
    usecols=['PRODUCT', 'PRODUCT_TYPE', 'PORTFOLIO_CURRENCY', 'NATIONALITY'],
    nrows=99)
    # column names to lower case
    df.columns = [x.lower() for x in df.columns]
    return df

, и результат таков:

Data columns (total 5 columns):
 #   Column              Non-Null Count  Dtype   
---  ------              --------------  -----   
 0   PORTFOLIO_CURRENCY  198 non-null    category
 1   PRODUCT             198 non-null    object  
 2   PRODUCT_TYPE        198 non-null    object  
 3   AGE                 185 non-null    float64 
 4   NATIONALITY         198 non-null    object  
dtypes: category(1), float64(1), object(3)

Я погуглил и прочитал документацию: я не нашел причин или упоминаний о возможном «переутомлении» 'возразить в случае указания категории.

Второй вопрос касается созданной мной функции синтаксического анализа, отображающей выбранный столбец, указанный в параметре преобразователей Pandas. Как показано в приведенном ниже коде, у меня есть преобразователь для столбца NATIONALITY, который по возможности фиксирует необработанный формат в уникальное значение (пример значений: «IT», «FR | FR», «FR | IT» -> «IT»). "," FR "," FR | IT "), и я хотел бы снова сохранить результат этого столбца в виде категориального столбца. Моя логика c работает, но, опять же, результирующий тип столбца не является категориальным, хотя я возвращаю его как тип.

convertters = {'NATIONALITY': parse_country, 'AGE': parse_age,}

def parse_country(s):
    unique_values = set(s.split("|"))
    sorted_values = "|".join(sorted(list(unique_values)))
    return pd.Categorical(sorted_values)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...