Перейти к содержимому

Как заменить запятую на точку в pandas

  • автор:

Как заменить значения в кадре данных Pandas (с примерами)

Часто вам может понадобиться заменить значения в одном или нескольких столбцах кадра данных pandas.

К счастью, это легко сделать с помощью функции .replace() .

В этом руководстве представлено несколько примеров практического использования этой функции в следующем кадре данных:

import pandas as pd #create DataFrame df = pd.DataFrame() #view DataFrame print(df) team division rebounds 0 A E 11 1 A W 8 2 B E 7 3 B E 6 4 B W 6 5 C W 5 6 C E 12 

Пример 1: замена одного значения во всем фрейме данных

В следующем коде показано, как заменить одно значение во всем DataFrame pandas:

#replace 'E' with 'East' df = df.replace(['E'],' East') #view DataFrame print(df) team division rebounds 0 A East 11 1 A W 8 2 B East 7 3 B East 6 4 B W 6 5 C W 5 6 C East 12 

Пример 2: замена нескольких значений во всем фрейме данных

В следующем коде показано, как заменить несколько значений во всем кадре данных pandas:

#replace 'E' with 'East' and 'W' with 'West' df = df.replace(['E', 'W'],['East', 'West']) #view DataFrame print(df) team division rebounds 0 A East 11 1 A West 8 2 B East 7 3 B East 6 4 B West 6 5 C West 5 6 C East 12 

Пример 3. Замена одного значения в одном столбце

В следующем коде показано, как заменить одно значение в одном столбце:

#replace 6 with 0 in *rebounds* column df['rebounds'] = df['rebounds']. replace (6, 0) #view DataFrame print(df) team division rebounds 0 A E 11 1 A W 8 2 B E 7 3 B E 0 4 B W 0 5 C W 5 6 C E 12 

Пример 4. Замена нескольких значений в одном столбце

Следующий код показывает, как заменить несколько значений в одном столбце:

#replace 6, 11, and 8 with 0, 1 and 2 in *rebounds* column df['rebounds'] = df['rebounds']. replace([6, 11, 8], [0, 1, 2]) #view DataFrame print(df) team division rebounds 0 A E 1 1 A W 2 2 B E 7 3 B E 0 4 B W 0 5 C W 5 6 C E 12 

Замена символов в столбце

Добро пожаловать на StackOverflow на русском! В чем заключается ваш вопрос? Опишите проблему, отредактируйте вопрос. Какие данные на входе, какие ожидаете получить на выходе? Прочитайте о том, как создать минимальный, но самодостаточный пример, демонстрирующий проблему.

3 авг 2021 в 1:27

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Во-первых вы можете записать создание датафрейма гораздо короче:

df = pd.DataFrame(< 'Наименование': items[1:11], 'Цена': prices[1:11], 'Производитель': brands[1:11] >) 

А если у вас будут по-питоновски с нулевого элемента данные идти, то и срезы не нужны, просто указываете список с данными и всё.

А что касается цены, то если она в строковом виде, то можно сделать так:

result = df.copy() result['Цена'] = result['Цена'].str.replace('.', ',') 

Но лучше всё-таки числовые данные хранить в виде чисел, а не строк, и тогда запятая или точка — это уже вопрос показа данных, а не их хранения. Сначала нужно ответить на вопрос — зачем вам это нужно?

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

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

Когда я решил, что будет умно проверять на одну точку

ValueError: could not convert string to float: 'в соответствии с 227, 227.1 и 228'
  • Вопрос задан 10 мар. 2023
  • 267 просмотров

1 комментарий

Простой 1 комментарий

just_clarity @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') else: df[col] = df[col].astype(str) if df[col].str.match(r'^\d+\.\d+$').any(): df[col] = pd.to_numeric(df[col], errors='coerce') df[col].replace('nan', None, inplace=True)

Решения вопроса 0
Ответы на вопрос 1

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'') # замена точек на запятые в столбце 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 заменяет точки на запятые в строковом представлении столбца. Однако, в данном коде не учитывается возможность наличия в столбце символов, отличных от точек и цифр.

Ответ написан 10 мар. 2023
just_clarity @just_clarity Автор вопроса

Проблема в том, что таблицы у меня в файлах разные и мне надо еще как-то определить что там (не руками)

just_clarity @just_clarity Автор вопроса

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

у меня вообще Е+19 получается) куча лишних нулей приписывается. что даст замена Е на 0

a777mp198

(Ответ сгенерирован искусственным интеллектом!)
just_clarity, для автоматического определения типа столбца в Pandas можно воспользоваться методом pandas.api.types.infer_dtype, который позволяет определить тип данных в столбце на основе его содержимого.
Например, чтобы определить тип столбца в цикле, можно использовать такой код:

import pandas as pd from pandas.api.types import is_numeric_dtype # загрузка данных df = pd.read_csv('data.csv') # определение типа столбцов for col in df.columns: col_dtype = pd.api.types.infer_dtype(df[col]) if col_dtype == 'datetime64[ns]': df[col] = pd.to_datetime(df[col], dayfirst=True, errors='coerce', format='%d/%m/%Y') elif is_numeric_dtype(df[col]): # обработка числового столбца if '.' in df[col].astype(str).tolist(): df[col] = df[col].astype(str).str.replace(".", ",") else: df[col] = df[col].astype(str).str.replace("E", "0") else: # обработка текстового столбца # . 

Здесь мы используем функцию is_numeric_dtype из модуля pandas.api.types, чтобы проверить, является ли столбец числовым. Если да, то мы обрабатываем его с помощью методов str.replace и astype. Если столбец не является числовым, то мы можем обработать его как текстовый столбец.

Замена буквы E на 0 не решит проблему с научной записью чисел, если в числе имеются многие порядки. Например, число 1e19 (эквивалентное числу 10000000000000000000) будет преобразовано в строку ‘10000000000000000000’, которая все еще содержит многие порядки.

Для преобразования чисел в строковое представление без научной записи можно воспользоваться методом pd.options.display.float_format. Например, можно задать формат, в котором числа будут иметь 2 знака после запятой и ширину поля 20 символов:

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) # задание формата вывода чисел pd.options.display.float_format = ''.format # вывод результата print(df)

Здесь метод pd.options.display.float_format устанавливает формат вывода чисел с двумя знаками после запятой и шириной поля 20 символов. Таким образом, числа в столбце amount будут иметь вид ‘1000.50’ вместо ‘1000.5’ и не будут иметь научную запись.

Однако, следует учитывать, что этот метод изменяет формат вывода чисел для всего скрипта, поэтому его следует использовать осторожно. Если необходимо задать формат только для определенного столбца, можно воспользоваться методом apply и лямбда-функцией:

df['amount'] = df['amount'].apply(lambda x: ''.format(x))

Как преобразовать строки в числа с плавающей запятой в Pandas

Часто вас может заинтересовать преобразование одного или нескольких строковых столбцов в pandas DataFrame в столбцы с плавающей запятой. К счастью, это легко сделать с помощью функции astype() .

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

import numpy as np import pandas as pd #create DataFrame df = pd.DataFrame() #view DataFrame df points assists rebounds 0 NaN 5.0 11 1 12.0 NaN 8 2 15.0 7.0 10 3 14.0 9.0 6 4 19.0 12.0 6 #view column data types df.dtypes points float64 assists object rebounds object dtype: object 

Пример 1: преобразование одного столбца в число с плавающей запятой

Следующий синтаксис показывает, как преобразовать столбец «assists» из строки в число с плавающей запятой:

#convert "assists" from string to float df['assists'] = df['assists'].astype (float) #view column data types df.dtypes points float64 assists float64 rebounds object dtype: object 

Пример 2. Преобразование нескольких столбцов в число с плавающей запятой

Следующий синтаксис показывает, как преобразовать столбцы «ассисты» и «отборы» из строк в числа с плавающей запятой:

#convert both "assists" and "rebounds" from strings to floats df[['assists', 'rebounds']] = df[['assists', 'rebounds']].astype (float) #view column data types df.dtypes points float64 assists float64 rebounds float64 dtype: object 

Пример 3: преобразовать все столбцы в числа с плавающей запятой

Следующий синтаксис показывает, как преобразовать все столбцы в DataFrame в числа с плавающей запятой:

#convert all columns to float df = df.astype (float) #view column data types df.dtypes points float64 assists float64 rebounds float64 dtype: object 

Пример 4. Преобразование строки в число с плавающей запятой и заполнение значений NaN

Следующий синтаксис показывает, как преобразовать столбец «assists» из строк в числа с плавающей запятой и одновременно заполнить значения NaN нулями:

#convert "assists" from string to float and fill in NaN values with zeros df['assists'] = df['assists'].astype (float). fillna (0) #view DataFrame df points assists rebounds 0 NaN 5.0 11 1 12.0 0.0 8 2 15.0 7.0 10 3 14.0 9.0 6 4 19.0 12.0 6 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *