@just_clarity

Как правильно обработать колонки в датафрейме?

Я делаю себе разбивалку файлов.
Возникла проблема с типами, если тип дата, то я ее немного преобразую, а вот с числами беда.
Результат поиска привел меня к чему-то типа такого:
for col in df.columns:
    if pd.api.types.is_datetime64_dtype(df[col]):
        df[col] = pd.to_datetime(
            df[col], dayfirst=True, errors='coerce', format='%d/%m/%Y')
        # pd.to_datetime(df[col]).dt.strftime('%d.%m.%Y')
    else:
        if all([isinstance(val, str) and '.' in val and val.count('.') == 1 for val in df[col].astype(str)]):
            df[col] = df[col].astype(str).str.replace(".", ",")
        else:
            df[col] = df[col].astype(str).apply(lambda x: '{:.0f}'.format(float(x)) if '.' in x else x)
        df[col].replace('nan', None, inplace=True)

Я пытаюсь сделать так, чтобы все столбцы кроме даты были str, но мне надо столбец с суммой чтобы был с запятой в числе(чтобы в дальнейшем я мог в экселе его обрабатывать) (я пытался сделать через количество точек, но у меня есть поля с текстом, в которых бывает по одной точке)+ длинные числа (коды) нужны без научной записи(с Е).
Я уже запутался в lambda, как исправить?
Когда я решил, что будет умно проверять на одну точку

ValueError: could not convert string to float: 'в соответствии с  227, 227.1 и 228'
  • Вопрос задан
  • 642 просмотра
Пригласить эксперта
Ответы на вопрос 1
a777mp198
@a777mp198
Python developer
(Ответ сгенерирован искусственным интеллектом!)
Для обработки колонок в датафрейме можно использовать методы библиотеки Pandas. Например, чтобы преобразовать числовые столбцы в строки и заменить точки на запятые, можно воспользоваться методом applymap и методом str.replace:
import pandas as pd

# пример данных
data = {
    'date': ['2022-01-01', '2022-01-02', '2022-01-03'],
    'code': [100000000000000, 200000000000000, 300000000000000],
    'amount': [1000.50, 2000.75, 3000.0],
    'text': ['some text', 'more text', 'even more text']
}
df = pd.DataFrame(data)

# преобразование числовых столбцов в строки с запятыми
df[['amount', 'code']] = df[['amount', 'code']].applymap(lambda x: f'{x:,.2f}')

# замена точек на запятые в столбце amount
df['amount'] = df['amount'].str.replace('.', ',')

# вывод результата
print(df)

Здесь метод applymap применяется к столбцам amount и code, чтобы заменить числа на строки с запятыми. Затем метод str.replace применяется только к столбцу amount, чтобы заменить точки на запятые. Все остальные столбцы остаются в исходном виде.

Чтобы избежать научной записи в столбце code, можно преобразовать его в строку и затем заменить букву E на 0:
# преобразование столбца code в строку и замена буквы E на 0
df['code'] = df['code'].astype(str).str.replace('E', '0')

# вывод результата
print(df)

Здесь метод astype применяется к столбцу code, чтобы преобразовать его в строку, а затем метод str.replace заменяет точки на запятые в строковом представлении столбца. Однако, в данном коде не учитывается возможность наличия в столбце символов, отличных от точек и цифр.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы