У меня странная проблема при загрузке моего 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)