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

Как заменить значения в столбце pandas

  • автор:

Как заменить значение ячейки pandas

Пробую через .replace() заменить значения столбца, но либо меняется весь столбец на одно значение, либо ничего не происходит. В пандах только начинаю разбираться. Тут в разные датафреймы записываю нужные столбцы из таблицы Исходная таблица:

records—record Save Time: 2022-10-29 08:03:39 Username: vova Severity = Critical,Major,Minor,Warning. Alarm status = Acknowledged and uncleared,Unacknowledged and uncleared. Maintenance Status is in NORMAL. Last occurred = 1 hours. SeverityID Name Type Source Name1 Location Information Occurrence Times First Occurred (NT) Last Occurred (NT) - Critical301 Ivan OSS OSS UH1925 Uncleared , 150, 123, error port=6007, ror code=N/A, Error message=handshake timed out 14 2022-10-19 16:29:20 2022-10-29 07:59:40 Correlative alarm Major 21825 Egor OSS OSS UH1925 Uncleared , 150, 123, error port=6007, ror code=N/A, Error message=handshake timed out 7 2022-10-17 14:51:05 2022-10-29 07:58:35 Correlative alarm Major 21801 Masha OSS OSS UH1925 Uncleared , 150, 123, error port=6007, ror code=N/A, Error message=handshake timed out 8 2022-10-17 14:51:05 2022-10-29 07:58:35 Correlative alarm Major 21801 Ivan OSS OSS UH1925 Uncleared , 150, 123, error port=6007, ror code=N/A, Error message=handshake timed out 8 2022-10-17 14:51:05 2022-10-29 07:58:35 Correlative alarm Major 21801 Egor OSS OSS UH1925 Uncleared , 150, 123, error port=6007, ror code=N/A, Error message=handshake timed out 8 2022-10-17 14:51:05 2022-10-29 07:58:35 Correlative alarm Major 21801 Masha OSS OSS UH1925 Uncleared , 150, 123, error port=6007, ror code=N/A, Error message=handshake timed out 8 2022-10-17 14:51:05 2022-10-29 07:58:35 Correlative alarm Major 21801 Masha OSS OSS UH1925 Uncleared , 150, 123, error port=6007, ror code=N/A, Error message=handshake timed out 8 2022-10-17 14:51:05 2022-10-29 07:58:35 Correlative alarm Major 21801 Masha OSS OSS UH1925 Uncleared , 150, 123, error port=6007, ror code=N/A, Error message=handshake timed out 8 2022-10-17 14:51:05 2022-10-29 07:58:35 Correlative alarm Major 22214 Masha OSS OSS UH1925 Uncleared , 150, 123, error port=6007, ror code=N/A, Error message=handshake timed out 5 2022-10-17 14:50:39 2022-10-29 07:58:10 Correlative alarm Minor 21541 Masha OSS OSS UH1925 Uncleared , 150, 123, error port=6007, ror code=N/A, Error message=handshake timed out 7 2022-10-17 14:50:30 2022-10-29 07:58:00 Correlative alarm Minor 21541 Masha OSS OSS UH1925 Uncleared , 150, 123, error port=6007, ror code=N/A, Error message=handshake timed out 6 2022-10-19 14:34:25 2022-10-29 07:58:00 Correlative alarm Minor 21541 Masha OSS OSS UH1925 Uncleared , 150, 123, error port=6007, ror code=N/A, Error message=handshake timed out 14 2022-10-17 14:50:49 2022-10-29 07:56:55
import pandas as pd import numpy as np from pandas.io.excel import ExcelWriter alm_data_df = pd.DataFrame(pd.read_excel('someData.xlsx', index_col=False)) date_df = alm_data_df.iloc[:,9] alm_data_df = alm_data_df.iloc[:,6] alm_data_df = alm_data_df.str.split(',', expand=True) vendor_df = pd.DataFrame(alm_data_df.iloc[:,5]) vendor_df = vendor_df.dropna() vendor_df.columns = ['vendor'] vendor_df.replace(>) alm_data_df = alm_data_df.iloc[:,7:9] #alm_data_df.to_excel('stolb.xlsx') #date_df.to_excel('date.xlsx') #vendor_df.to_excel('vendor.xlsx') df = pd.concat([vendor_df,date_df,alm_data_df], axis=1) df = df.dropna() df.columns = ['vendor', 'date', 'enodebcode', 'enodebname'] #df.to_excel('date.xlsx') #with ExcelWriter('1.xlsx', mode="a") as writer: # df.to_excel(writer, sheet_name="Лист 13", index=False) print(df) 

Вот результат на выходе

 vendor date enodebcode enodebname 5 MNC=39 2022-10-21 05:05:53 EnodeBCode EnodeBName 6 MNC=39 2022-10-20 16:42:53 EnodeBCode EnodeBName 7 MNC=39 2022-10-20 12:06:20 EnodeBCode EnodeBName 8 MNC=39 2022-10-20 11:45:07 EnodeBCode EnodeBName 9 MNC=39 2022-10-20 07:06:04 EnodeBCode EnodeBName 10 MNC=39 2022-10-19 11:24:16 EnodeBCode EnodeBName 11 MNC=39 2022-10-16 05:10:05 EnodeBCode EnodeBName 12 MNC=39 2022-09-02 19:25:50 EnodeBCode EnodeBName 13 MNC=39 2022-07-04 18:08:03 EnodeBCode EnodeBName 14 MNC=39 2022-07-03 09:04:36 EnodeBCode EnodeBName 15 MNC=39 2022-06-06 17:09:35 EnodeBCode EnodeBName 16 MNC=39 2021-06-29 19:09:03 EnodeBCode EnodeBName 17 MNC=39 2021-01-28 10:45:45 EnodeBCode EnodeBName 

А в итоге в первом столбце должен быть Nokia или Huawei

Pandas: как заменить значения в столбце на основе условия

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

#replace values in 'column1' that are greater than 10 with 20 df.loc[df['column1'] > 10, 'column1'] = 20 

В следующих примерах показано, как использовать этот синтаксис на практике.

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

Предположим, у нас есть следующие Pandas DataFrame:

import pandas as pd #create DataFrame df = pd.DataFrame() #view DataFrame df team position points assists 0 A G 5 3 1 A G 7 8 2 A F 7 2 3 A F 9 6 4 B G 12 6 5 B G 13 5 6 B F 9 9 7 B F 14 5 

Мы можем использовать следующий код, чтобы заменить каждое значение в столбце «точки», превышающее 10, значением 20:

#replace any values in 'points' column greater than 10 with 20 df.loc[df['points'] > 10, 'points'] = 20 #view updated DataFrame df team position points assists 0 A G 5 3 1 A G 7 8 2 A F 7 2 3 A F 9 6 4 B G 20 6 5 B G 20 5 6 B F 9 9 7 B F 20 5 

Обратите внимание, что каждое из трех значений в столбце «точки», которые были больше 10, были заменены значением 20.

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

Предположим, у нас есть следующие Pandas DataFrame:

import pandas as pd #create DataFrame df = pd.DataFrame() #view DataFrame df team position points assists 0 A G 5 3 1 A G 7 8 2 A F 7 2 3 A F 9 6 4 B G 12 6 5 B G 13 5 6 B F 9 9 7 B F 14 5 

Мы можем использовать следующий код, чтобы заменить каждое значение в столбце «позиция», где количество очков меньше 10 или где количество передач меньше 5, строкой «Плохо»:

#replace string in 'position' column with 'bad' if points < 10 or assists < 5 df.loc[(df['points'] < 10) |(df['assists'] < 5), 'position'] = 'Bad ' #view updated DataFrame df team position points assists 0 A Bad 5 3 1 A Bad 7 8 2 A Bad 7 2 3 A Bad 9 6 4 B G 20 6 5 B G 20 5 6 B Bad 9 9 7 B F 20 5 

Точно так же мы можем использовать следующий код, чтобы заменить каждое значение в столбце «позиция», где количество очков меньше 10 и где количество передач меньше 5, строкой «Плохо»:

#replace string in 'position' column with 'bad' if points < 10 and assists < 5 df.loc[(df['points'] < 10) &(df['assists'] < 5), 'position'] = 'Bad ' #view updated DataFrame df team position points assists 0 A Bad 5 3 1 A G 7 8 2 A Bad 7 2 3 A F 9 6 4 B G 12 6 5 B G 13 5 6 B F 9 9 7 B F 14 5 

Обратите внимание, что в двух строках, где количество очков было меньше 10, а количество передач меньше 5, значение «позиция» было заменено строкой «Плохо».

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные операции в 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 

Замена значений в pandas DataFrame с использованием словаря

Visual representation of replacing DataFrame values with dictionary values.

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

Представим, что есть DataFrame:

import pandas as pd import numpy as np df = pd.DataFrame(< 'col1': ['w', 1, 2], 'col2': ['a', 2, np.nan] >)

DataFrame выглядит следующим образом:

| | col1 | col2 |
|——|——|——|
| 0 | w | a |
| 1 | 1 | 2 |
| 2 | 2 | NaN |

Пусть требуется заменить значения в столбце ‘col1’ с использованием словаря:

Это можно сделать с помощью метода replace() , который предоставляет pandas. Вот как это можно сделать:

df['col1'] = df['col1'].replace(di)

После выполнения кода DataFrame будет выглядеть так:

| | col1 | col2 |
|——|——|——|
| 0 | w | a |
| 1 | A | 2 |
| 2 | B | NaN |

Метод replace() заменил значения в столбце ‘col1’, которые были ключами в словаре ‘di’, на соответствующие значения из этого словаря. Значения, которые не были в словаре (в данном случае ‘w’), остались без изменений.

Важно отметить, что метод replace() не изменяет исходный DataFrame, если не производить присваивание результата обратно в ‘col1’. Если нужно сохранить исходный DataFrame без изменений, можно создать новый столбец для сохранения результата:

df['new_col'] = df['col1'].replace(di)

Также стоит учесть, что метод replace() сохраняет значения NaN. Если в столбце есть значение NaN, оно останется NaN после замены.

В заключение, метод replace() в pandas — это удобный инструмент для замены значений в DataFrame с использованием словаря, который позволяет легко и быстро преобразовать данные.

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

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