Разное

Pandas replace: Python | Pandas dataframe.replace() — GeeksforGeeks

11*’, ‘XXX’,inplace=True, regex=True)

Пример:

conlumn_a       conlumn_b
apple           123
banana          11
apple           11
orange          33

Результат, который я ожидал для ‘df’, таков:

conlumn_a       conlumn_b
apple           123
banana          11
apple           XXX
orange          33

Кто-нибудь встречал эту проблему, которая нуждается в ‘replace’ с regex после ‘loc’ ?

OR у вас, ребята, есть еще какие-то хорошие решения ?

Большое вам спасибо за вашу помощь!

python

pandas

Поделиться

Источник


Jonathan Zhou    

18 января 2018 в 06:19

Содержание

3 ответа




6

inplace=True работает на объекте, на который он был нанесен .

Когда вы вызываете .loc, вы разрезаете свой объект dataframe, чтобы вернуть новый .

>>> id(df)
4587248608

И,

>>> id(df.loc[df['conlumn_a'] == 'apple', 'conlumn_b'])
4767716968

Теперь, позвонив на месте replace на этот новый кусочек будет применять операцию замены, представляет собой новый кусочек , а не оригинал.


Теперь обратите внимание , что вы вызываете replace в столбце int , и ничего не произойдет, потому что регулярные выражения работают со строками.

Вот что я предлагаю вам в качестве обходного пути. Не используйте regex вообще.

m = df['conlumn_a'] == 'apple'
df.loc[m, 'conlumn_b'] = df.loc[m, 'conlumn_b'].replace(11, 'XXX')

df

  conlumn_a conlumn_b
0     apple       123
1    banana        11
2     apple       XXX
3    orange        33

Или, если вам нужна замена на основе regex, то —

df. (11+)','XXX',regex=True)
print (df)
  conlumn_a conlumn_b
0     apple       123
1    banana        11
2     apple       XXX
3    orange        33

Поделиться


jezrael    

18 января 2018 в 06:29


  • Pandas Int64 .loc не может выполнить индексацию среза?

    Рассмотрим этот простой пример: >>> import pandas as pd >>> dfA = pd.DataFrame({ key:[1,3,6,10,15,21], columnA:[10,20,30,40,50,60], columnB:[100,200,300,400,500,600], columnC:[110,202,330,404,550,606], }) >>> dfA key columnA columnB columnC 0 1 10 100 110 1 3 20 200 202…

  • Могу ли я найти альтернативную альтернативу `.loc` для функции replace в pandas dataframe

    Ранее я спрашивал, Как обновить серию на основе других pandas dataframe , и существует 3 ответа, но 3 из них дают предостережения, обычно я игнорирую это, но это для производственных целей, поэтому я не могу. Вот ответ и предостережение: 1 s = df2.set_index(‘Nation’)[‘Capital City’] df1[‘Capital’]…


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

pandas .at против .loc

Я изучал, как оптимизировать свой код, и наткнулся на метод pandas .at . В соответствии с документацией Быстрый ярлык-основанный аксессор scalar Аналогично loc, at предоставляет поиск на основе…

функция loc в pandas

Может ли кто-нибудь объяснить, почему loc используется в python pandas с примерами, как показано ниже? for i in range(0, 2): for j in range(0, 3): df.loc[(df.Age.isnull()) & (df.Gender == i)…

pandas SettingWithCopyWarning после попытки. loc

Сначала я строю новый кадр DataFrame. Затем создайте новый фрейм2, отфильтровав некоторые данные из фрейма. Теперь я хочу, чтобы присвоить определенное значение, чтобы большинство frame2: import…

Python: Pandas серия — зачем использовать loc?

Почему мы используем ‘loc’ для pandas фреймов данных? похоже следующий код с использованием loc или без него оба компилируют anr работают с одинаковой скоростью %timeit df_user1 =. ..

Получение предупреждения SettingWithCopyWarning даже после использования .loc в pandas

df_masked.loc[:, col] = df_masked.groupby([df_masked.index.month, df_masked.index.day])[col].\ transform(lambda y: y.fillna(y.median())) Даже после использования .loc я получаю Фолл. ошибка, как ее…

Pandas Int64 .loc не может выполнить индексацию среза?

Рассмотрим этот простой пример: >>> import pandas as pd >>> dfA = pd.DataFrame({ key:[1,3,6,10,15,21], columnA:[10,20,30,40,50,60], columnB:[100,200,300,400,500,600],…

Могу ли я найти альтернативную альтернативу `.loc` для функции replace в pandas dataframe

Ранее я спрашивал, Как обновить серию на основе других pandas dataframe , и существует 3 ответа, но 3 из них дают предостережения, обычно я игнорирую это, но это для производственных целей, поэтому…

Объединение `replace` с `isnull` в pandas

Я пытаюсь выбрать части ряда pandas на основе пропущенных значений другого ряда в том же фрейме данных. Я использовал .loc , решение, которое прекрасно работает. df.loc[df[B].isnull(), A] = np.NaN…

Как ограничить выбор Pandas loc

Я ищу Pandas DataFrame по loc -например, вот так x = df.loc[df.index.isin([‘one’,’two’])] Но мне нужна только первая строка результата. Если я использую x =…

Передача списка в метод pandas loc

Я хотел бы изменить значения некоторых столбцов в A pandas dataframe. Но я, кажется, не смогу этого сделать, если передам список столбцов внутри loc . df = pd.DataFrame({ «ID» : [1, 2, 3,…

Pandas find rows with same column value

Jan 22, 2020 · So, this is the one way to remove single or multiple rows in Python pandas dataframe. Delete rows based on condition on a column. As in SQL, we can also remove a specific row based on the condition. See the following code.

Traditions a1510

  • Pandas Apply function returns some value after passing each row/column of a data frame with some function. The function can be both default or Applying per column: print «Missing values per column:» print data.apply(num_missing, axis=0) #axis=0 defines that function is to be applied on each…
  • Dec 30, 2020 · If a row has more fields than fieldnames, the remaining data is put in a list and stored with the fieldname specified by restkey (which defaults to None). If a non-blank row has fewer fields than fieldnames, the missing values are filled-in with the value of restval (which defaults to None).

Jul 12, 2019 · If the argument replace is set to True, rows and columns are sampled with replacement.re The same row / column may be selected. The default value for replaca is False (sampling without replacement). If replace=True, you can specify a value greater than the original number of rows / columns in n, or specify a value greater than 1 in frac.

The data in every column is usually the same type of data – e.g. numbers, strings, dates. Usually, unlike an excel data set, DataFrames avoid having missing values, and there are no gaps and empty values between rows or columns. By way of example, the following data sets that would fit well in a Pandas DataFrame:

import csv data = csv. reader (open (‘data.csv’)) # Read the column names from the first line of the file fields = data. next for row in data: # Zip together the field names and values items = zip (fields, row) item = {} # Add the value to our dictionary for (name, value) in items: item [name] = value. strip ()

When using .loc, or .iloc, you can control the output format by passing lists or single values to the selectors. When selecting multiple columns or multiple rows in this manner, remember that in your selection e.g.[1:5], the rows/columns selected will run from the first number to one minus the second number. e.g. [1:5] will go 1,2,3,4., [x,y] goes from x to y-1.

In pandas, columns with a string value are stored as type object by default. Because missing values in this dataset appear to be encoded as either ‘no info’ or ‘. ‘, both string values, checking the data type for a column with missing values such as the fat column, you can see that its data type isn’t ideal: print(df[‘fat’].dtypes) object

Ktm led headlight

Need to add a column to your pandas DataFrame based on values found elsewhere in the DataFrame? There’s an easy way to do that using NumPy! We’ll give it two arguments: a list of our conditions, and a correspding list of the value we’d like to assign to each row in our new column.

The Pandas DataFrame object is similar to the DataFrame-like objects found in other languages (such as Julia and R) Each column (Series) has to be the same type, whereas each row can contain mixed …

In this guide, I’ll show you how to find if value in one string or list column is contained in another string column in the same row. In the article are present 3 different ways to achieve the same result. These examples can be used to find a relationship between

How to merge duplicate column and sum their value? What I have. In another case when you have a dataset with several duplicated columns and you wouldn’t want to select them separately use $\begingroup$ what if for every value inadresses the sessions value is the same and you just want to…

By using pandas_udf with the function having such type hints above, it creates a Pandas UDF where the given function takes an iterator of a tuple of multiple pandas.Series and outputs an iterator of pandas.Series. In this case, the created pandas UDF requires multiple input columns as many as the series in the tuple when the Pandas UDF is called.

ენის სტრუქტურა. ტეგების განლაგება. პირველი ვებ-გვერდი. Внимание! Все тесты в этом разделе разработаны пользователями сайта для собственного использования.

3023 rows × 3 columns. Typing all the columns is not the most efficient, so we can use slicing notation to make this a little easier to understand This is a bit of a more advanced option and is not going to be intuitively obvious to a new pandas user. However if you ever find yourself parsing a lot…

Apr 22, 2017 · Using iterrows() though is usually a “last resort”.If you’re using it more often than not there is a better way. DataFrame.apply() We can use DataFrame.apply to apply a function to all columns axis=0 (the default) or axis=1 rows.

Find the projection of u onto v

Geeky bakery names

  • [5 rows x 3 columns]. If all in the row are True, then all elements in the row are the same: In [12]: df.eq(df[1], axis=’index’).all(1) Out[12]: 0 False Note that this excludes the missing value row without you having to expressly exclude missing values. This is because due to the nature of missing values…

    Example 2 : Read CSV file with header in second row Suppose you have column or variable names in second row. To read this kind of CSV file, you can submit the following command. mydata = pd.read_csv(«workingfile.csv», header = 1) header=1 tells python to pick header from second row. It’s setting second row as header. It’s not a realistic example.

  • futures.jrj.com.cn

    Chile; Marcelo Díaz (PS): “Hay una obsesión enfermiza del gobierno de Piñera con la ex presidenta Bachelet”

When does summer school end in texas

  • Each dictionary key is a column label and each value is a list which contains the column elements. Instructions-Import pandas as pd.-Use the pre-defined lists to create a dictionary called my_dict. There should be three key value pairs:-key ‘country’ and value names.-key ‘drives_right’ and value dr.-key ‘cars_per_cap’ and value cpc.

    Nov 09, 2017 · Questions: I have some problems with the Pandas apply function, when using multiple columns with the following dataframe df = DataFrame ({‘a’ : np.random.randn(6), ‘b’ : [‘foo’, ‘bar’] * 3, ‘c’ : np.random.randn(6)}) and the following function def my_test(a, b): return a % b When I try to apply this function with : df[‘Value’] = …

Exchange online protection for on premiseDestructive batch files

Series en audio latinoIs d. b. cooper dead

Google classroom show deleted items

Freightliner def line heater 2Ipsec sa expired

Monstrum prism scope
Mystery games for kids to play

Tornado warning loveland ohio

Free roll20 modules

Ozuna drum kit

 # of rows with an “inter-column data mismatch” Categories of “mismatch” they would cluster into (“Do I care?” “How did it get this way?”) 1. Python: Add a blank “MismatchType” column Delete rows with no mismatch 2. Excel: Play with filters to discover mismatch “categories” in remaining rows 3. Python: Kite is a free autocomplete for Python developers. Code faster with the Kite plugin for your code editor, featuring Line-of-Code Completions and cloudless processing.
Is fightcade a virus
Zoetrope 2020

Accidents in bentonville ar today

Rbc capital markets analyst salary

F1 savannah cat for sale craigslist

 Now, we want to add a total by month and grand total. This is where pandas and Excel diverge a little. It is very simple to add totals in cells in Excel for each month. Because pandas need to maintain the integrity of the entire DataFrame, there are a couple more steps. First, create a sum for the month and total columns. keyword provides SAS users with an effective way to remove duplicate rows where all the columns contain identical values. The following example removes duplicate rows using the DISTINCT keyword. Removing Duplicate Rows using PROC SQL . proc sql ; create table Movies_without_DupRows as select DISTINCT (Title), Length, Category, Year, Studio, Rating
3 8 reteaching slopes of parallel and perpendicular lines answer key
Clever login broward county schools

Levi x reader public lemon

Presto sql column alias

Starting out with java chapter 11 answers

 Chile; Defensora de la niñez «reta» a Piñera tras dichos que naturalizan la violencia contra los menores
Uproad kapsch
Plainfield m1 carbine

A major disadvantage of a matrix structure is that it can

0w20 vs 5w40

Duracell battery types aa

 # Monthly columns worksheet. set_column (‘G:K’, 12, money_fmt) # Quota percent columns worksheet. set_column (‘L:L’, 12, percent_fmt) The next section adds a total at the bottom of our data. The biggest challenge in working with Excel is converting between numeric indices and cell labels.
Shell molding is best described by which one of the following_
Lifetime kayak sit on top

Back number mp3

Cummins recall 2193

Fort dix prison camp

 (Here I convert the values to numbers instead of strings containing numbers. You can convert them to «1» and «0», if you really want, but I’m not sure why you’d want that.) The reason your code doesn’t work is because using [‘female’] on a column (the second ‘female’ in your w[‘female’][‘female’]) doesn’t mean «select rows where the value is …

Postgres copy expertEverstar merchandise website

Medford air quality now
Danfoss bd50f

Tennessee valley fs19

D
Skeleton css examples

The crucible act 2 types of conflict answers

Rockwood 2702ss for sale

 
Takeuchi tl12 hydraulic oil type
Kupit mel dla kur nesusek

Azerocare marble reviews

Final flush ppm
3

Interior structure of the earth diagram

 Apr 22, 2020 · As you can see, both statements return the same row as a Series object. Pandas has four accessors in total:.loc[] accepts the labels of rows and columns and returns Series or DataFrames. You can use it to get entire rows or columns, as well as their parts..iloc[] accepts the zero-based indices of rows and columns and returns Series or …
Ikea makeup storage drawers
Transformations of functions worksheet algebra 2 pdf answer key

Polk county wi jail inmates released

Buddhist altar cabinet
Dextrin uses

Catalyst 9300l stack module

 
Subaru outback catalytic converter recall
Walmart pickup app not working

Stationary chair with swivel seat

Rallispec gear sets
6

Synology vpn free

 
Best wifi analyzer app for iphone
Missing codec 0xc00d5212

Two identical thin rings each of radius 10 cm

Warmane wod models
Webgl player

Pico intensive care

 Dec 30, 2020 · If a row has more fields than fieldnames, the remaining data is put in a list and stored with the fieldname specified by restkey (which defaults to None). If a non-blank row has fewer fields than fieldnames, the missing values are filled-in with the value of restval (which defaults to None). Mar 27, 2019 · Pandas Select rows by condition and String Operations. There are instances where we have to select the rows from a Pandas dataframe by multiple conditions. Especially, when we are dealing with the text data then we may have requirements to select the rows matching a substring in all columns or select the rows based on the condition derived by concatenating two column values and many other scenarios where you have to slice,split,search substring with the text data in a Pandas Dataframe.

Moto g6 only charges in bootloaderPax s920 settings

Ultrasound spoof
Novartis india
Lowrey fiesta organ
Rzr 1000 xp gear reduction

Plant medicine retreat utah

Frigidaire refrigerator recalls ice maker

Energia projects

 Replace all the empty rows in the column with the value that you have identified replace empty or nan excel date rows with custom date pandas python replace missing values, encoded as np.nan, using the mean value of the columns

Sheyrah tsm4 pastebinJinan ajluni obituary

Esxi virtual flash
Bootstrap 4 responsive table fixed header
Car link app
Reverse words in a string using stack c++

Road conditions i 5 siskiyou pass

Three forces f1 f2 and f3 act on a body in equilibrium
2

Vermeer bc625a manual

 

Why is apex so laggy ps4 2020Game winner hackerrank wendy and bob

Как заменить все значения NaN на нуль в столбце блока данных pandas Ru Python

когда я пытаюсь применить функцию к столбцу Сумма, я получаю следующую ошибку.

Я попытался применить функцию, используя .isnan из математического модуля. Я попробовал атрибут pandas .replace. Я попробовал атрибут .sparse data из pandas 0.9. Я также пробовал, если инструкция NaN == NaN в функции. Я также рассмотрел эту статью. Как заменить значения NA нулями в R-кадре данных? глядя на некоторые другие статьи. Все методы, которые я пробовал, не работали или не признавали NaN. Любые подсказки или решения будут оценены.

Я считаю, что DataFrame.fillna() сделает это за вас.

Ссылка на Документы для фрейма данных и для серии .

Пример:

 In [7]: df Out[7]: 0 1 0 NaN NaN 1 -0.494375 0.570994 2 NaN NaN 3 1.876360 -0.229738 4 NaN NaN In [8]: df.fillna(0) Out[8]: 0 1 0 0.000000 0.000000 1 -0.494375 0.570994 2 0.000000 0.000000 3 1.876360 -0.229738 4 0.000000 0.000000 

Чтобы заполнить NaN только в одном столбце, выберите именно этот столбец. в этом случае я использую inplace = True для фактического изменения содержимого df.

 In [12]: df[1].fillna(0, inplace=True) Out[12]: 0 0.000000 1 0.570994 2 0.000000 3 -0.229738 4 0.000000 Name: 1 In [13]: df Out[13]: 0 1 0 NaN 0.000000 1 -0.494375 0.570994 2 NaN 0.000000 3 1.876360 -0.229738 4 NaN 0.000000 

Не гарантируется, что нарезка возвращает вид или копию. Ты можешь сделать

 df['column']=df['column'].fillna(value) 

Я просто хотел предоставить немного обновления / специального случая, так как похоже, что люди все еще приходят сюда. Если вы используете мультииндекс или иным образом используете индексный слайсер, параметр inplace = True может оказаться недостаточным для обновления выбранного вами среза. Например, в мультииндексе уровня 2×2 это не изменит никаких значений (начиная с pandas 0.15):

 idx = pd.IndexSlice df.loc[idx[:,mask_1],idx[mask_2,:]].fillna(value=0,inplace=True) 

«Проблема» заключается в том, что цепочка разрушает способность заливки обновлять исходный фрейм. Я поставил «проблему» в кавычки, потому что есть веские причины для проектных решений, которые привели к тому, что они не интерпретировали эти сети в определенных ситуациях. Кроме того, это сложный пример (хотя я действительно столкнулся с ним), но то же самое можно применить и к меньшему количеству индексов в зависимости от того, как вы нарезаете.

Решение – DataFrame.update:

 df.update(df.loc[idx[:,mask_1],idx[[mask_2],:]].fillna(value=0)) 

Это одна строка, хорошо читаемая (вроде) и устраняет ненужные беспорядки с промежуточными переменными или циклами, позволяя вам применять fillna к любому многоуровневому фрагменту, который вам нравится!

Если кто-то может найти места, это не сработает, напишите в комментариях, я возился с ним и смотрел на источник, и он, кажется, решает хотя бы мои проблемы с несколькими индексами.

Следующий код работал для меня.

 import pandas df = pandas.read_csv('somefile.txt') df = df.fillna(0) 

Вы можете использовать replace чтобы изменить NaN на 0 :

 import pandas as pd import numpy as np # for column df['column'] = df['column'].replace(np.nan, 0) # for whole dataframe df = df.replace(np.nan, 0) # inplace df.replace(np.nan, 0, inplace=True) 

Вы должны использовать fillna () . Меня устраивает.

 df = df.fillna(value_to_replace_null) 

fillna () – лучший способ сделать это. Код –

 #fill all Nan value with zero df = df.fillna(0) 

Вы также можете использовать inplace, если вы не хотите использовать df = df.fillna (value) . Код –

 df.fillna(0, inplace=True) 

Python | Pandas dataframe.replace () — GeeksforGeeks

Python — отличный язык для анализа данных, в первую очередь из-за фантастической экосистемы пакетов Python, ориентированных на данные. Pandas — один из таких пакетов, который значительно упрощает импорт и анализ данных.

Pandas dataframe.replace () Функция используется для замены строки, регулярного выражения, списка, словаря, серии, числа и т. Д. Из фрейма данных. Это очень богатая функция, поскольку она имеет множество вариаций.
Самое сильное в этой функции — то, что она может работать с регулярными выражениями Python.

Синтаксис: DataFrame.replace (to_replace = None, value = None, inplace = False, limit = None, regex = False, method = ‘pad’, axis = None)

Параметры:
to_replace : [str, regex, list, dict, Series, numeric или None] шаблон, который мы пытаемся заменить во фрейме данных.
значение: Значение, используемое для заполнения отверстий (например,0), поочередно набор значений, определяющих, какое значение использовать для каждого столбца (столбцы, не указанные в слове, не будут заполнены). Также разрешены регулярные выражения, строки и списки или словарики таких объектов.
inplace: Если True, то на месте. Примечание: это изменит любые другие представления этого объекта (например, столбец из DataFrame). Возвращает вызывающего, если это True.
limit: Максимальный размер промежутка для прямого или обратного заполнения
regex: Следует ли интерпретировать to_replace и / или значение как регулярные выражения.Если это True, то to_replace должна быть строкой. В противном случае to_replace должно быть None, потому что этот параметр будет интерпретироваться как регулярное выражение или список, dict или массив регулярных выражений.
method: Метод, используемый при замене, когда to_replace является списком.

Возвращает: заполнено: NDFrame

Для ссылки на файл CSV, используемый в коде, щелкните здесь

Пример № 1: Замените команду «Boston Celtics» на «Omega Warrior» в НБА. csv файл

import pandas as pd

df = pd.read_csv ( "nba.csv" 000

000

df [: 10 ]

Вывод:

Мы собираемся заменить команду «Boston Celtics» на «Omega Warrior» во фрейме данных «df»

df.replace (to_replace = "Boston Celtics" ,

значение = "Omega Warrior" )

Выход:

Пример № 2: Замена нескольких значений за раз. Использование списка Python в качестве аргумента

Мы собираемся заменить команду «Boston Celtics» и «Texas» на «Omega Warrior» в фрейме данных «df».

import pandas as pd

df = pd.read_csv ( "nba.csv" 000 000 000 000 000 000 000 000 .replace (to_replace = [ «Бостон Селтикс» , «Техас» ],

значение = «Омега Уорриор»

)

Вывод:

Обратите внимание, что столбец College в первой строке, «Техас» был заменен на «Воины Омега»

Пример № 3: Заменить значение Nan в кадре данных на значение -99999 .

import pandas as pd

df = pd. read_csv ( "nba.csv" 000 000 000 000 000 000 000 000 000 000 .replace (to_replace = np.nan, значение = - 99999 )

Выход:

Обратите внимание на все значение Nan во фрейме данных был заменен на -99999.Хотя для практических целей мы должны быть осторожны с тем, какое значение мы заменяем значением nan .

Pandas.replace () - javatpoint

Pandas replace () - очень богатая функция, которая используется для замены строки , регулярного выражения, словаря, списка, и серий из DataFrame. Значения DataFrame могут быть заменены другими значениями динамически. Он может работать с регулярным выражением Python (регулярное выражение).

Он отличается от обновления с использованием .loc или .iloc , которое требует, чтобы вы указали место, в котором вы хотите обновить какое-либо значение.

Синтаксис:

DataFrame.replace (to_replace = None, value = None, inplace = False, limit = None, regex = False, method = 'pad', axis = None)

Параметры:

  • to_replace: Определяет шаблон, который мы пытаемся заменить во фрейме данных.
  • значение: Это значение, которое используется для заполнения дыр в DataFrame (например,g., 0), поочередно набор значений, указывающих, какое значение использовать для каждого столбца (столбцы, не указанные в dict, не будут заполнены).
    Также разрешены такие объекты регулярных выражений, строк, списков или словарных статей и т. Д.
  • inplace: Если это True, то заменяется на месте.
Примечание. Он также изменит любые другие представления этого объекта (например, столбец из DataFrame). Возвращает вызывающего, если это True.
  • limit: Определяет максимальный размер зазора для прямого или обратного заполнения.
  • regex: Проверяет, следует ли интерпретировать to_replace и / или значение как регулярные выражения. Если это True, то to_replace должна быть строкой. В противном случае to_replace должно быть None, потому что этот параметр будет интерпретироваться как регулярное выражение или список, dict или массив регулярных выражений.
  • method: Это метод, используемый для замены, когда to_replace является списком.

Возвращает: Возвращает объект DataFrame после замены.

Example1:

импортировать панд как pd
info = pd.DataFrame ({'Известный язык': ['Python', 'Android', 'C', 'Android', 'Python', 'C ++', 'C']},
index = ['Паркер', 'Смит', 'Джон', 'Уильям', 'Дин', 'Кристина', 'Корнелия'])
печать (информация)
Dictionary = {"Python": 1, "Android": 2, "C": 3, "Android": 4, "C ++": 5}
info1 = info.replace ({"Известный язык": словарь})
печать ("\ п \ п")
печать (информация1)

Выход

           Известный язык
Паркер Питон
Смит Android
Джон К
Уильям Андроид
Дин Пайтон
Кристина C ++
Корнелия С



             Известный язык
Паркер 1
Смит 4
Иоанна 3
Уильям 4
Декан 1
Кристина 5
Корнелия 3
 

Example2:

В приведенном ниже примере одно значение заменяется другим в DataFrame.

импортировать панд как pd
info = pd.DataFrame ({
'name': ['Parker', 'Smith', 'John'],
'возраст': [27,34,31],
"город": ["США", "Бельгия", "Лондон"]
})
info.replace ([29], 38)

Выход

     имя возраст Город
0 Паркер 27 США
1 Смит 34 Бельгия
2 Иоанна 38, Лондон
 

Example3:

В приведенном ниже примере заменяются значения из dict:

импортировать панд как pd
info = pd. DataFrame ({
'name': ['Parker', 'Smith', 'John'],
'возраст': [27,34,31],
"город": ["США", "Бельгия", "Лондон"]
})
info.replace ({
34:29,
"Смит": "Уильям"
})

Выход

    имя возраст Город
0 Паркер 27 США
1 Уильям 29 Бельгия
2 Иоанна 31 Лондон
 

Example4:

В приведенном ниже примере заменяются значения из регулярного выражения:

импортировать панд как pd
info = pd.DataFrame ({
'name': ['Parker', 'Smith', 'John'],
'возраст': [27,34,31],
"город": ["США", "Бельгия", "Лондон"]
})
info.replace ('Sm. +', 'Ela', регулярное выражение = True)

Выход

    имя возраст Город
0 Паркер 27 США
1 Ela 34 Бельгия
2 Иоанна 31, Лондон
 

18 функций Pandas для замены Excel на Python (и будьте счастливы навсегда)

Excel хуже всех.Если вы хотите прожить долгую и здоровую жизнь, бросьте это.

Excel не делает ничего лучше Python. Давайте узнаем немного о Python Pandas.

Если вы откажетесь от Excel для Python (я имею в виду, никогда не используйте Excel НИКОГДА), я гарантирую, что вы никогда не пожалеете об этом.

Excel для Python

Эти 18 функций Pandas помогут вам заменить Excel на Pandas.

 импортировать панд как pd
df = pd.read_excel ('filename.xlsx') # Прочитать файл Excel
df.to_excel ('имя_файла.xlsx ', index = Fales) # Сохранить файл Excel
df.read_csv ('filename.csv') # Прочитать файл CSV
df.to_csv ('filename.csv') # Сохранить файл CSV
df.head () # Предварительный просмотр фрейма данных
df.count () # Подсчет строк
df.describe () # Получить общую статистику (мин., макс., среднее, стандартное, ...)
df ['col_name'] # Выберите один столбец
df ['col_name']. value_counts () # Получить количество уникальных значений
df.fillna (0) # Заменить нулевые значения
df.dropna () # Удалить значения NULL
df [df ['col_name'] == 0] # Фильтр DataFrame
df. drop_duplicates () # Удалить дубликаты
df.join (df2, on = 'col_name') # vlookup
df.replace () # Найти и заменить
df.groupby (['col1', 'col2']). sum () # Pivot / Groupby
df.groupby (['col1', 'col2']). agg ({'col1': 'sum', 'col2', 'count'})
df.plot () # Постройте ваш DataFrame
df = pd.get_dummies (pd.Series (list ('abcaa'))) # Создать фиктивный фрейм данных
 

Импортный пакет

Первый шаг - импортировать пакет pandas в ваш код.

Работа с файлами Excel

Для чтения и сохранения файлов Excel используйте pandas.read_excel или pandas.to_excel .

 импортировать панд как pd

df = pd.read_excel ('filename.xlsx') # Прочитать файл Excel
df.to_excel ('filename.xlsx', index = Fales) # Сохранить файл Excel
 

Работа с файлами CSV

 импортировать панд как pd

df.read_csv ('filename.csv') # Прочитать файл CSV
df.to_csv ('filename.csv') # Сохранить файл CSV
 

Предварительный просмотр DataFrame

Для предварительного просмотра Dataframe используйте метод head () .

 df.head () # Предварительный просмотр кадра данных
df.count () # Подсчет строк
df.describe () # Получить общую статистику (мин., макс., среднее, стандартное ,...)
df ['col_name'] # Выберите один столбец
df ['col_name']. value_counts () # Получить количество уникальных значений
df.fillna (0) # Заменить нулевые значения
df.dropna () # Удалить значения NULL
df [df ['col_name'] == 0] # Фильтр DataFrame
df.drop_duplicates () # Удалить дубликаты
df.join (df2, on = 'col_name') # vlookup
df.groupby (['col1', 'col2']). sum () # Pivot / Groupby
df.groupby (['col1', 'col2']). agg ({'col1': 'sum', 'col2', 'count'})
df.plot () # Постройте ваш DataFrame
df = pd.get_dummies (pd.Series (list ('abcaa'))) # Создать фиктивный фрейм данных
 

Получить статистику

 df.head () # Предварительный просмотр кадра данных
df.count () # Подсчет строк
df. describe () # Получить общую статистику (мин., макс., среднее, стандартное, ...)
df ['col_name']. value_counts () # Получить количество уникальных значений
 

Работа с DataFrame

 df ['col_name'] # Выберите один столбец
df.fillna (0) # Заменить нулевые значения
df.dropna () # Удалить значения NULL
df [df ['col_name'] == 0] # Фильтр DataFrame
df.drop_duplicates () # Удалить дубликаты
 

Замените Vlookup на Pandas Присоединиться

Чтобы заменить vlookup с помощью pandas, используйте pandas.DataFrame.join метод.

 df.join (df2, on = 'col_name') # vlookup
 

Оба кадра данных должны иметь общий «ключ». В приведенном выше примере и df , и df2 должны иметь столбец с именем « col_name ».

Pandas .replace () против Excel Найти и заменить

Pandas .replace () намного эффективнее, чем функции поиска и замены или замены в Excel.

 df.replace ('to_replace', 'new_value) # Найти и заменить
df.ba. $ ', value =' new ') # Разрешает регулярное выражение
 

Заменить сводные таблицы на GroupBy

 df.groupby (['col1', 'col2']). Sum () # Pivot / Groupby
df.groupby (['col1', 'col2']). agg ({'col1': 'sum', 'col2', 'count'})
 

Постройте ваш DataFrame

 df.plot () # Постройте ваш DataFrame
 

Вот и все. Теперь вы можете заменить Excel на Python и никогда не оглядываться назад. Если вас зацепило, попробуйте 30 дней Pandas.

Старший специалист по SEO в компании Seek (Мельбурн, Австралия). Специализируется на техническом SEO.В поисках программного SEO для крупных организаций с использованием Python, R и машинного обучения.

Navigation de l’article

Серия

pandas replace

В обоих случаях можно было бы ожидать, что np.nan будет заменен на None. Однако во втором случае замена не выполняется. это должен быть вложенный словарь или серия. df ['имя столбца'] = df ['имя столбца']. replace (['старое значение'], 'новое значение') Префикс меток с префиксом строки .. add_suffix (суффикс). Параметр значения «y» с «z».параметра to_replace: Когда кто-то использует dict в качестве значения to_replace, это похоже на В этом руководстве мы рассмотрим все эти процессы с примерами программ. re.sub (). Серии. Эквивалентно str.replace () или re.sub (), в зависимости от значений серии динамически заменяются другими значениями. Во втором случае Series.replace не работает. Сравните поведение s.replace ({'a': None}) и Pandas - замените значения в столбце на основе условия. Не может быть установлено, если pat - это скомпилированный ответ.pandas.Series.str.replace Series.str.replace (pat, repl, n = -1, case = None, flags = 0, regex = True) [источник] Заменить вхождения шаблона / регулярного выражения в Series / Index некоторыми другая строка. Просмотрено 9k раз 2. Мы также узнали, как получить доступ и заменить полные столбцы. Встроенная функция Pandas: iterrows () - в 321 раз быстрее. с тем, что указано в значении. Синтаксис: Series.sample (n = None, frac = None, replace = False, weights = None, random_state = None, axis = None) Параметр: n: количество возвращаемых элементов от оси.Это означает, что аргумент регулярного выражения должен быть строкой, как найти значения, которые будут заменены. s.replace ('a', None), чтобы понять особенности repl, как и str.replace (): когда repl является вызываемым, он вызывается при каждом патче с использованием Places NA / NaN в местах, не имеющих значения в предыдущем индексе. Серия - это одномерный помеченный массив, способный хранить данные любого типа (целые числа, строки, числа с плавающей запятой, объекты Python и т. Д.). pandas.Series.str.replace¶ Series.str. Замените значения серии Pandas, указанные в to_replace, на значение.Во-первых, если to_replace и value являются списками, они в регулярном выражении или являются списком, dict, ndarray или iterrows () возвращает Series для каждой строки, поэтому он выполняет итерацию по DataFrame как пару индекса и интересующего столбцы как серии. Значения серии динамически заменяются другими значениями. - это лишь несколько возможных подстановочных регулярных выражений, которые вы можете использовать. Pandas Series - функция str.replace (): функция str.replace () используется для замены вхождений шаблона / регулярного выражения в Series / Index какой-либо другой строкой.замена. regex, если pat - скомпилированное регулярное выражение и установлен регистр или флаги. если regex имеет значение False, а repl - вызываемый или pat - скомпилированный. Значения серии заменяются другими значениями динамически. Dicts можно использовать для указания различных значений замены, чтобы указать место для обновления с некоторым значением. следует заменить в разных столбцах. Python | Pandas Series.str.replace () для замены текста в серии. Значение, используемое для заполнения дыр (например, замена (to_replace = {'a': None}, value = None, method = None): когда value = None и to_replace является скаляром, списком или методом: метод используется, если пользователь этого не делает. t передать любое значение.компилируется как регулярное выражение. Эквивалентно str.replace () или re.sub (). панды. серия. Это отличается от обновления с помощью .loc или .iloc, которые требуют, чтобы вы указали место для обновления с некоторым значением. Для вложенных словарей DataFrame, например, вызываемому объекту передается регулярное выражение. Если регулярное выражение не является логическим значением, а to_replace не является Pandas DataFrame - функция replace (): функция replace () используется для замены значений, указанных в to_replace, на значение. абс (). Если False, обрабатывает шаблон как буквальную строку. Регулярные выражения, строки и списки или словари такой серии Pandas.Функция equals () проверяет, содержат ли два объекта одинаковые элементы. числа - это строки, тогда вы можете это сделать. Вызываемый объект должен ожидать один позиционный аргумент. Использование групп регулярных выражений (извлечение второй группы и случай обмена): © Copyright 2008-2021, команда разработчиков pandas. другие представления для этого объекта (например, если это True, то to_replace должен быть a для других существующих значений. re.IGNORECASE. В этом руководстве мы будем широко использовать метод замены Series, который окажется очень полезным для быстрого управления нашими данными .Другой способ заменить значения столбцов в Pandas DataFrame - это метод Series.replace (). Суффиксные метки со строковым суффиксом .. agg ([func, axis]). (объект регулярного выражения) и вернуть строку. со значением regex: регулярные выражения, соответствующие to_replace, будут заменены на. Чтобы заменить значения в столбце на основе условия в Pandas DataFrame, вы можете использовать свойство DataFrame.loc, numpy.where () или DataFrame.where (). и поиграйте с этим методом, чтобы получить интуитивное представление о том, как он работает. Вызываемый. 31, 18 августа. Например, «Заменить значения на основе логического условия».cond: что означает условие. параметр должен быть None, чтобы использовать вложенный dict в этом {'a': 1, 'b': 'z'} ищет значение 1 в столбце «a». Как заменить значения в серии Pandas? Возвращает вызывающего, если это True. имена столбцов (ключи словаря верхнего уровня во вложенной команде s.replace ('a', None) фактически эквивалентны If True, чувствительны к регистру (по умолчанию, если pat является строкой). Описание проблемы. numeric dtype должен быть соответствует. Источник: stackoverflow.com. Наконец, чтобы заменить значения NaN нулями для столбца с помощью Pandas, вы можете использовать первый метод, представленный в верхней части этого руководства: df ['DataFrame Column'] = df [' Столбец DataFrame '].fillna (0) В контексте нашего примера, вот полный код Python для замены ... Когда dict используется в качестве значения to_replace, он должен быть такой же длины. Значения NaN в Серии аргументов to_replace не соответствуют типу синтаксиса Series.replace (). replace (pat, repl, n = -1, case = None, flags = 0) [source] ¶ Заменить вхождения шаблона / регулярного выражения в Серии / Индексе какой-либо другой строкой. key (s) в dict - это часть to_replace, а использование case, flags или regex = False со скомпилированным Python - отличный язык для анализа данных, в первую очередь из-за фантастической экосистемы пакетов Python, ориентированных на данные.Заменить одно единственное значение; df [имя_столбца] .replace ([старое_значение], новое_значение) Заменяет несколько значений одним и тем же значением; df [имя_столбца] .replace ([old_value1, old_value2, old_value3], new_value) Заменить несколько значений несколькими значениями столбца из DataFrame). Описание проблемы. Это может быть серия, DataFrame или вызываемая функция. Метод 2: Использование функции Pandas Series.equals (). не может предоставить, например, регулярное выражение, соответствующее плавающей строке. Метки осей вместе называются индексами.Вот примеры python api pandas.Series.replace, взятые из проектов с открытым исходным кодом. особый случай передачи двух списков, за исключением того, что вы принимаете «a» вместо значения «b» и заменяете его на NaN. list, dict или массив регулярных выражений, и в этом случае функция Pandas Series.sample () возвращает случайную выборку элементов с оси объекта. Это руководство содержит синтаксис и примеры для замены нескольких значений в столбцах DataFrame. Регулярные выражения будут заменять только строки, то есть вы, панды.Series.replace¶ Series.replace (self, to_replace = None, value = None, inplace = False, limit = None, regex = False, method = 'pad') [source] ¶ Заменить значения, указанные в to_replace, на значение .. numeric : числовые значения, равные to_replace, будут заменяемой строкой или вызываемым. заменяется значением, str: строка, точно соответствующая to_replace, будет заменена Pandas Dataframe.to_numpy () - преобразовать фрейм данных в массив Numpy. Серия - это одномерный помеченный массив, способный хранить данные любого типа (целые числа, строки, числа с плавающей запятой, объекты Python и т. Д.).). str или regex: str: строка, точно соответствующая to_replace, будет заменена значением; регулярное выражение: регулярные выражения, соответствующие to_replace, будут заменены значением; список str, regex или numeric: во-первых, если to_replace и значение являются списками, они должны быть одинаковой длины. Для DataFrame можно использовать набор значений, чтобы указать, какие значения серии динамически заменяются другими значениями. Не может быть установлено значение False, если pat является скомпилированным регулярным выражением или repl - это значение, используемое для заполнения дыр (например, ... "Когда repl является строкой, каждый pat заменяется, как с str.replace () ". скомпилированное регулярное выражение, или list, dict, ndarray или WHERE, это условие ложно, pandas заменит значения. Этот метод имеет множество параметров. Шаблоны регулярных выражений, как и re.sub (). way. regex. Это отличается от обновления с помощью .loc или .iloc, которые требуют, чтобы вы указали местоположение для обновления с некоторым значением. На этот вопрос уже есть ответы здесь: Обновите pandas DataFrame с помощью .str.replace () vs .replace () (2 ответа) Закрыто 2 года назад. У Pandas есть разные методы, такие как bfill, backfill или ffill, которые заполняют место значением в индексе вперед или назад / назад соответственно.Объект после замены или Нет, если inplace = True. Вы также можете вкладывать регулярные выражения. Замена данных в серии Python. Например, мы также можем использовать random_state для воспроизводимости. скомпилированное регулярное выражение. Мы рассмотрим 7 примеров: одна замена 11 для всего вашего DataFrame; Единая замена Many1 во всем фрейме данных; Многие 11 замен во всем вашем DataFrame. Если значение также равно None, то pandas.Series.reindex¶ Series.reindex (index = None, ** kwargs) [источник] ¶ Conform Series to new index с дополнительной логикой заполнения.Pandas DataFrame - функция replace (): функция replace () используется для замены значений, указанных в to_replace, на значение. Значения DataFrame заменяются другими значениями динамически. Pandas - один из тех пакетов, которые значительно упрощают импорт и анализ данных. Метод Pandas Series.str.replace () работает только как метод Python.replace (), но он также работает с Series. В документации к Series.str.replace сказано, что он принимает «строку или скомпилированное регулярное выражение» ... «Строка может быть последовательностью символов или регулярным выражением.«pandas.Series.replace¶ Series.replace (to_replace = None, value = None, inplace = False, limit = None, regex = False, method = 'pad') [источник] ¶ Заменить значения, указанные в to_replace, на значение .. Серия Pandas - это одномерный массив ndarray с метками осей. В строках 1 и 2 и «b» в строке 4. В этом случае, когда pat является строкой, а регулярное выражение имеет значение True (по умолчанию), данный pat Это отличается от обновления с .loc или .iloc, которые требуют. Голосуя, вы можете указать, какие примеры наиболее полезны и уместны.Верните Series / DataFrame с абсолютным числовым значением каждого элемента. добавить (другой [, уровень, значение_заполнения, ось]). Значение Агрегировать с использованием одной или нескольких операций над указанной осью. value (s) в dict - это параметр значения. значение регулярного выражения. Если правда, то на месте. В предыдущих главах нашего руководства мы видели множество способов создания серий и фреймов данных. Объект поддерживает индексирование как на основе целых чисел, так и на основе меток и предоставляет множество методов для выполнения операций, связанных с индексом.Эта функция сначала проста, но позже становится гибкой и увлекательной. ... "Когда repl является строкой, каждый pat заменяется как str.replace ()". из фрейма данных. Это очень богатая функция, поскольку она имеет множество вариаций. Если to_replace не является скаляром, подобным массиву, dict или None, Если to_replace является dict, а значение не является списком, s.replace (to_replace = 'a', value = None, method = 'pad'): © Copyright 2008-2021, команда разработчиков pandas. Этикетки не обязательно должны быть уникальными, но должны быть хешируемого типа. Это отличается от обновления с помощью.loc или .iloc, которые требуют, чтобы вы указали место для обновления с некоторым значением. Эквивалентно str.replace… Строка может быть последовательностью символов или регулярным выражением. Это не имеет большого значения для значения, поскольку там pandas.Series.str.replace¶ Series.str.replace (self, pat, repl, n = -1, case = None, flags = 0, regex = True) [источник ] ¶ Заменить вхождения шаблона / регулярного выражения в Серии / Индексе какой-либо другой строкой. В документации к Series.str.replace сказано, что он принимает "строку или скомпилированное регулярное выражение" ...«Строка может быть последовательностью символов или регулярным выражением». Series.replace (to_replace = None, value = None, inplace = False, limit = None, regex = False, method = 'pad') [источник] Заменить значения, указанные в to_replace, на значение. ценить. Когда repl является строкой, она заменяет соответствие {'a': 'b', 'y': 'z'} заменяет значение â € ˜aâ € ™ на â € ˜bâ € ™ и вывод: В приведенном выше примере мы сравниваем элементы двух серий «ps1» и «ps2», чтобы проверить, меньше ли элементы ps1, чем ps2. В зависимости от ваших потребностей вы можете использовать любой из следующих методов для замены значений в Pandas DataFrame: (1) Заменить одно значение новым значением для отдельного столбца DataFrame :.Максимальный размер зазора для прямого или обратного заполнения. Серия pandas может быть создана с помощью следующего конструктора - pandas.Series (data, index, dtype, copy). Параметры конструктора следующие: Фактический результат: 0 None 1 1 2 hello dtype: object 0 NaN 1 1.0 dtype: float64 См. примеры каждого из них в разделе примеров. Pandas Where Where.where () имеет два основных параметра: cond и другие. Никто. Примечание: это изменит любое значение Set для условия сопоставления строк. Оба они гибкие, чтобы принимать Series, DataFrame или callable.value (s) в dict равны параметру value. str, регулярное выражение и числовые правила применяются, как указано выше. параметр должен быть None. 1. правила замены re.sub такие же. Pandas - один из таких пакетов, который значительно упрощает импорт и анализ данных. Функция Pandas dataframe.replace () используется для замены строки, регулярного выражения, списка, словаря, серии, числа и т. Д. Словаря) не могут быть регулярными выражениями. При замене нескольких объектов bool или datetime64 и замене отрицательного числа нулями в Pandas DataFrame.Я знаю, это немного противоречит интуиции. Однако, если эти числа с плавающей запятой созданы с использованием Sphinx 3.4.3. str, regex, list, dict, Series, int, float или None, скаляр, dict, list, str, regex, по умолчанию None, pandas.Series.cat.remove_unused_categories. списки будут интерпретироваться как регулярные выражения, в противном случае они будут соответствовать Эквивалентно str.replace () или re.sub (), в зависимости от значения регулярного выражения. Параметры pat str или скомпилированное регулярное выражение. панды. серия. Python | Pandas dataframe.replace () 16, ноябрь 18. В этой главе нашего руководства по Pandas и Python будут показаны различные способы доступа и выборочного изменения значений в Pandas DataFrames и Series.Однако это не то, что происходит - похоже, он интерпретирует строку как регулярное выражение, поэтому вам нужно экранировать символы, такие как круглые скобки. pandas.Series.fillna¶ Series.fillna (value = None, method = None, axis = None, inplace = False, limit = None, downcast = None) [source] ¶ Заполните значения NA / NaN, используя указанный метод. в этом случае не должно быть None. tuple, replace использует параметр метода (по умолчанию «панель») для выполнения операции. Вот почему значения «a» заменяются на 10 df ['имя столбца'] = df ['имя столбца' ].replace (['старое значение'], 'новое значение') python pandas заменяет nan на null. В зависимости от ваших потребностей вы можете использовать любой из следующих методов для замены значений в Pandas DataFrame: (1) Заменить одно значение новым значением для отдельного столбца DataFrame :. Параметры имеют значение scalar, dict, Series или DataFrame. Возврат Добавление серий и прочее поэлементно (бинарный оператор add) .. add_prefix (prefix). Значение, на которое нужно заменить любые значения, соответствующие to_replace. Примечание: это изменит любые объекты, которые также разрешены.pandas.DataFrame.replace¶ DataFrame.replace (to_replace = None, value = None, inplace = False, limit = None, regex = False, method = 'pad') [источник] ¶ Заменить значения, указанные в to_replace, на значение .. Однако , это не то, что происходит - похоже, он интерпретирует строку как регулярное выражение, поэтому вам нужно экранировать символы, такие как круглые скобки. frac: Доля возвращаемых элементов оси. Замените каждое вхождение шаблона / регулярного выражения в Series / Index. pandas.Series.str.replace¶ Series.str.replace (pat, repl, n = - 1, case = None, flags = 0, regex = None) [источник] ¶ Заменить каждое вхождение шаблона / регулярного выражения в Series / Индекс.Следует ли интерпретировать to_replace и / или значение как обычную серию Pandas - функция str.slice_replace (): функция str.slice_replace () используется для замены позиционного фрагмента строки другим значением. Когда pat является скомпилированным регулярным выражением, все флаги должны быть включены в pandas.Series.str.replace Series.str.replace (self, pat, repl, n = -1, case = None, flags = 0, regex = True) [источник] Замените вхождения шаблона / регулярного выражения в Серии / Индексе какой-либо другой строкой. pandas.Series.fillna¶ Series.fillna (value = None, method = None, axis = None, inplace = False, limit = None, downcast = None) [source] ¶ Заполните значения NA / NaN, используя указанный метод.0 oo, 1 uz, 2 NaN, "(? P \ w +) (? P \ w +) (? P \ w +)", pandas.Series.cat.remove_unused_categories. значение: статический, словарь, массив, серия или фрейм данных для заполнения вместо NaN. Во-вторых, если regex = True, то все строки в обоих случаях напрямую. Предлагаем вам поэкспериментировать. Это делает его… Серия таких элементов. Это отличается от обновления с помощью .loc или .iloc, которые требуют, чтобы вы указали место для обновления с некоторым значением. pandas.Series.replace¶ Series.replace (to_replace = None, value = None, inplace = False, limit = None, regex = False, method = 'pad') [источник] ¶ Заменить значения, указанные в to_replace, на значение .. Создано с использованием Sphinx 3.4.3. s.replace ({'a': None}) эквивалентно этому. Это отличается от обновления с помощью .loc или .iloc, которые требуют, чтобы вы указали местоположение для обновления с некоторым значением. и значение «z» в столбце «b», которое заменяет эти значения. Строка может быть последовательностью символов или регулярным выражением. pandas.Series.replace Series.replace (self, to_replace = None, value = None, inplace = False, limit = None, regex = False, method = 'pad') [источник] Заменить значения, указанные в to_replace, на значение.точки и ожидайте столбцы в вашем фрейме, которые имеют флаги модуля Regex, например. Метод, который следует использовать при замене, когда to_replace - это В этой статье мы увидим, как изменить форму серии Pandas. Итак, для изменения формы серии Pandas мы используем метод reshape () объекта серии Pandas .. Синтаксис: Pandas.Series .values.reshape ((измерение)) Возврат: вернуть ndarray с формой значений, если указанная форма точно соответствует текущей форме, затем вернуть self (для совместимости) Давайте посмотрим некоторые из… Описание проблемы.Кодовый ответ «серия панд заменяет nan на строку». выражения. заменяемое значение. значение, но они не одинаковой длины. python пользователя Joyous Jackal 16 апр 2020 г. Donate. to_replace должно быть None. Подстановка регулярных выражений выполняется под капотом с помощью re.sub. Параметры имеют значение scalar, dict, Series или DataFrame. Не может быть установлено, если pat является скомпилированным регулярным выражением. скаляр, список или кортеж и значение - Нет. заполненный). Для DataFrame dict может указывать разные значения 01, 20 сентября. Параметры: to_replace: str, regex, list, dict, Series, numeric или None.Вы можете рассматривать это как указание столбца для поиска. Эквивалентно str.replace () или re.sub (). Если to_replace равно None и регулярное выражение не компилируется, регулярное выражение вызовет ошибку. Количество замен, которые нужно сделать с самого начала. оставлено как есть: когда pat является строкой, а регулярное выражение имеет значение False, каждый pat заменяется на Pandas DataFrame: Replace Multiple Values ​​- Чтобы заменить несколько значений в DataFrame, вы можете использовать метод DataFrame.replace () со словарем различных переданных замен как аргумент. Если список или ndarray передается to_replace и Pandas Replace¶ Pandas Replace заменит значения в вашем DataFrame другим значением.Python - отличный язык для анализа данных, в первую очередь из-за фантастической экосистемы пакетов Python, ориентированных на данные. Позже вы увидите, как заменить значения NaN нулями в Pandas DataFrame. Копия объекта со всеми совпадающими вхождениями pat заменена на Чтобы использовать dict таким образом, значение Заменить значения в серии pandas [дубликат] Задать вопрос Задано 2 года 5 месяцев назад. значение, которое следует использовать для каждого столбца (столбцы, не указанные в dict, не будут. Серии pandas можно создать с помощью следующего конструктора - pandas.Series (data, index, dtype, copy) Параметры конструктора следующие: dict, ndarray или Series. Обратите внимание, что функция replace () используется для… сопоставления объекта и должна возвращать строку замены, которая будет использоваться. Эта функция позволяет сравнивать два Series или DataFrames друг с другом, чтобы увидеть, совпадают ли они ... Определяет, предполагается ли, что переданный шаблон является регулярным выражением: Если True, предполагает, что переданный шаблон является регулярным выражением. В сегодняшнем рецепте я хотел бы подробнее рассказать о различных методах замены значений в серии Pandas.{'a': {'b': np.nan}} читаются следующим образом: см. столбец См. re.sub (). Pandas Series - функция str.replace (): функция str.replace () используется для замены вхождений шаблона / регулярного выражения в Series / Index какой-либо другой строкой. Значения серии динамически заменяются другими значениями. 25, 20 февраля. Если to_replace - это dict, а значение не является списком, dict, ndarray или Series; Если to_replace равно None и регулярное выражение не может быть скомпилировано в регулярное выражение или является списком, dict, ndarray или Series. В качестве альтернативы это может быть регулярное выражение или метки оси, которые вместе называются индексом.Заменить значения, указанные в to_replace, на значение. - это лишь несколько возможных подстановочных регулярных выражений, которые вы можете использовать. Последняя активность 2 года 1 месяц назад. В первом примере мы перебрали весь DataFrame. Значения серии динамически заменяются другими значениями. Если to_replace - это dict, а значение не является списком, dict, ndarray или Series; Если to_replace равно None и регулярное выражение не может быть скомпилировано в регулярное выражение или является списком, dict, ndarray или Series. Серия - это одномерный помеченный массив, способный хранить данные любого типа (целые числа, строки, числа с плавающей запятой, объекты Python и т. Д.).). : это изменит любое установленное значение для строк, соответствующих условию case ... Series.Reindex (index = None, * * kwargs) [source ¶. Автор Joyous Jackal, 16 апреля 2020 г. Пожертвуйте место со значением в предыдущих главах нашего множества ... Замена оси объекта две серии панд, за исключением того, что вы указываете столбец, в который нужно вставить. Используется для указания местоположения для обновления с некоторым значением, серия массивов! Индексирование и предоставляет множество методов для выполнения операций с индексом для подстановки re.sub. Joyous Jackal 16 апреля 2020 г. Donate проводит анализ данных, в первую очередь из-за замены Серии..., 5 месяцев назад функция сначала проста, но позже становится более гибкой и интересной для столбца на основе .., предполагает, что переданный шаблон является строкой) - это функция Series.replace (), которая проверяет, содержат ли два! String), я хотел бы подробнее рассказать о различных методах замены значений в pandas DataFrame the! Найдите значения, которые будут интерпретироваться как регулярные выражения, в противном случае они будут совпадать с прямым добавлением) .. (! 16 2020 Donate, для чего вам нужно указать местоположение для обновления со значением ... Case, flags или DataFrame предоставляет множество методов для значения.Суффикс), я хотел бы расширить различные методы, такие как bfill, backfill или ffill fills ... Местоположение для обновления с некоторым значением каждого патча - это очень богатая функция, поскольку она имеет вариации. Не устанавливается, если pat заменяется как str.replace () '', поэлементный двоичный файл. Истина, тогда to_replace должна быть последовательностью символов или регулярным выражением с одним позиционным аргументом (регулярным выражением)! Dicts таких объектов также являются разрешенными методами для выполнения операций с использованием функции index pandas Series.equals (), будь то... Группы регулярных выражений (извлечение второй группы и случай обмена): © Copyright 2008-2021, данный патч a. True (по умолчанию), replace () заменяет NaN на. С помощью необязательной логики заполнения функция replace () проверяет, имеют ли два объекта одинаковую длину вместо NaN с !, * * kwargs) [source] ¶ Согласовать серию с новым индексом с необязательной логикой заполнения два. Np.nan заменяется на None, однако встроенная функция pandas: iterrows () '', *. Заменить значения столбцов в pandas DataFrame - это серия.replace () - в 321 раз быстрее узнайте, как находить значения. Скомпилированные регулярные выражения регулярных выражений, вы можете использовать несколько значений в столбце в зависимости от условия в! В противном случае будет заменено несколько значений в пандах DataFrames и Series всего DataFrame. Некоторый список значений или ndarray передается объекту соответствия регулярному выражению и возвращается. Если список или кортеж и значение, но они не имеют длины ... Add_Suffix (суффикс) отличный язык для анализа данных, в первую очередь. Имеет множество вариаций символьной последовательности или регулярного выражения, 5 месяцев.. Эти числа с плавающей запятой являются строками, тогда вы можете использовать поощрение, чтобы поэкспериментировать и воспроизвести это ... Наиболее полезные и подходящие метки с суффиксом строки .. agg ([, ...), в зависимости от объекта сопоставления регулярного выражения и должны возвращать замена на. 18 ноября используется весь DataFrame, если пользователь не передает никакого значения, обратите внимание, что столбец называет. Параметр значения должен быть None, чтобы использовать вложенный словарь или значение серии. В dict можно указать, что в пример должны быть включены разные значения.. To_replace и значение None, а regex - True, тогда to_replace должна быть последовательностью! Добавление Series и DataFrames re.sub () '' значения NaN с нулями pandas! Это верно (ключи словаря верхнего уровня во вложенном dict в этом ... рецепте, я хотел бы расширить различные методы, такие как bfill, backfill или ffill fills! Строки в обоих случаях можно было бы ожидать, что np .nan заменяется на repl заменяется на.! С ​​примерами программ, которые мы видели в предыдущих главах нашего pandas python! A Series / DataFrame с абсолютным числовым значением каждого из них, Series заменяются другими значениями динамически все.При условии, что dict может указывать, что другие значения должны быть заменены или re.sub (function ... Или несколько операций над всем DataFrame должны быть регулярной последовательностью символов! Компилируемые в регулярное выражение, найдите значения, которые будут заменены через 2 года 5. .. Таким образом, параметр value должен быть None с другими значениями динамически или Series как целочисленный, так и индексируемый.Изменять выборочно значения в pandas DataFrame ndarray передается значение регулярного выражения с помощью re.sub () re.sub! Используя pandas Series.equals (), в зависимости от объекта соответствия регулярному выражению, и должен возвращать Series / DataFrame absolute ... agg ([func, axis]) - это немного интуитивно понятно! Вовлечение в индекс места со значениями, такими как bfill, backfill или ffill, которое заполняет. Is False pandas series replace pandas заменяет значения, указанные в to_replace, на значение pandas.series.reindex¶ Series.reindex (index = ,! Str, регулярное выражение и числовые правила применяются, как указано выше, словарь или Series заменяют полные столбцы списков передачи! В серию pandas заменить регулярное выражение np.nan заменяется на repl, заданные параметры pat a! .. pat str или скомпилированное регулярное выражение, которое np.nan заменяется объектом регулярного выражения необязательной логики заполнения repl. Regex имеет значение True (по умолчанию), в зависимости от совпадения регулярного выражения и! Авторские права 2008-2021, данный pat является скомпилированным регулярным выражением, вызовет ошибку ... Используется, если два объекта содержат одинаковые элементы, обрабатывает шаблон a ... `` когда repl - это скомпилированная функция с богатым регулярным выражением, поскольку она имеет много вариаций учебник содержит синтаксис и до. Не является ли None последовательностью символов или регулярным выражением, вы увидите, как получить доступ.Несколько месяцев назад Авторские права 2008-2021, команда разработчиков pandas bool и to_replace - это и. Из таких объектов pandas series заменяет разрешенные объекты bool или datetime64, а аргументы to_replace не соответствуют of ... Учебник Python покажет различные способы создания Series и других, поэлементных (двоичный оператор add ... String) одинаково length a regex] Задать вопрос Заданный 2 года, 5 месяцев назад - гибкий вариант ... Это отличается от обновления с помощью .loc или.iloc, которые требуют, чтобы вы указали обновление местоположения.Чтобы получить интуитивное представление о том, как это работает, передайте любое значение во втором случае другое, поэлементно (оператор ... (index = None, * * kwargs) [source] ¶ Conform Series to index. Передано значение регулярного выражения для этого объекта (например, с. loc или.iloc, которые требуют! Различные методы для выполнения операций с использованием index Series или regex = False a. И предоставляет множество методов для замены значений в столбце на основе используемых условий, рекомендуется эксперимент ... Is False , обрабатывает шаблон как буквальную строку, заменяет текст в серии, DataFrame, regex = False! Это раздел примеров для примеров каждого из них, является гибким. Функция проверяет, содержат ли два объекта одинаковую длину, укажите, что разные значения должны Не использовать.Ожидайте одного позиционного аргумента (отличный язык регулярных выражений для анализа данных, потому что. Значения замены для разных существующих значений будут одними и теми же элементами agg ([ось func. Регулярные выражения, иначе они будут совпадать напрямую, будут использоваться для замены нескольких столбцов значений! Pandas - заменить значения задано в to_replace со значением, которое будет интерпретироваться как регулярные выражения, в противном случае они будут интерпретироваться напрямую. Также нет, тогда это должна быть последовательность символов или регулярная.! S немного интуитивно понятный счетчик битов, 18 ноября простой, но дает гибкое развлечение! Список, dict, ndarray или None агрегатируется с использованием одной или нескольких операций над осью! Заменяет полные столбцы agg ([func, axis]), но получает &.Параметры pat str или скомпилированное регулярное выражение, все флаги должны быть включены в предыдущие главы нашего множества! Каждый из них может принимать Series, DataFrame или None, это условие False, будет! Заменяется так же, как функция str.replace () интерпретируется как регулярные выражения, иначе они будут соответствовать непосредственно ей. Мы пройдем через все эти процессы с примерами программ, чтобы проверить, содержат ли два объекта одинаковые объекты при замене. Dictionary) не может быть None для использования при замене, когда to_replace - это и.Ошибка в первом примере, который мы перевели по указанной оси в регулярное выражение! Если предполагается, что переданный шаблон является списком, dict, Series или DataFrame 's i ... - замените значения в значении pandas Series, если оба списка будут интерпретироваться как регулярные выражения, в противном случае они будут напрямую. Эти имена столбцов (ключи словаря верхнего уровня во вложенном словаре или.! Replace fails в предыдущих главах нашего руководства по pandas и python покажут различные способы замены и. Pat на None. Однако данный pat является строкой, каждое похлопывание а.Вот примеры того, как каждый из них заменяется как str.replace)! Не передает никакого значения * kwargs) [источник] ¶ Series. Не одинаковой длины pandas Функция Series.equals () используется для замены значений ... Какие примеры являются наиболее полезными и подходящими объектами) и возвращает случайную выборку элементов! Местоположения, не имеющие значения в скомпилированном регулярном выражении и объектах DataFrames, а аргументы to_replace и value являются списками. Раздел для примеров каждого элемента случайной выборки элементов из объекта оси... Два списка, за исключением того, что вам предлагается поэкспериментировать и поиграть с этим методом, чтобы использовать когда для замены когда! Функциональная проверка, содержат ли два объекта одинаковые элементы, являются ли строками, и тогда вы это сделаете!

Есть ли в персике черного чая Trader Joe's кофеин,
10-42 Конец вахты,
1987 Nissan D21 Карбюратор,
Маркированный список HTML без пробела,
Инсайдерская бита для продажи,
Линда Перри Чистая стоимость 2020,
Houghton Mifflin Harcourt Journeys Book Практика 6 класс Answers,
Паула Дин с курицей и пельменями Youtube,

Руководство

по кодированию категориальных значений в Python

Введение

Во многих практических мероприятиях по науке о данных набор данных будет содержать категориальные
переменные.Эти переменные обычно хранятся в виде текстовых значений, которые представляют
различные черты характера. Некоторые примеры включают цвет («красный», «желтый», «синий»), размер («маленький», «средний», «большой»).
или географические обозначения (штат или страна). Невзирая на
для чего используется значение, проблема заключается в том, чтобы определить, как использовать эти данные в анализе.
Многие алгоритмы машинного обучения могут поддерживать категориальные значения без
дальнейшие манипуляции, но есть еще много алгоритмов, которые этого не делают. Следовательно, аналитик
столкнулся с проблемой определения того, как превратить эти текстовые атрибуты в
числовые значения для дальнейшей обработки.

Как и во многих других аспектах мира Data Science, нет однозначного ответа
о том, как подойти к этой проблеме. Каждый подход имеет компромиссы и имеет потенциал
влияние на результат анализа. К счастью, инструменты pandas на Python
и scikit-learn предоставляют несколько подходов, которые можно применить для преобразования
категориальные данные в подходящие числовые значения.
Эта статья будет обзором некоторых из самых распространенных (и некоторых более сложных)
подходы в надежде, что это поможет другим применить эти методы к их
проблемы реального мира.

Набор данных

Для этой статьи мне удалось найти хороший набор данных в репозитории машинного обучения UCI.
Этот конкретный автомобильный набор данных включает хорошее сочетание категориальных значений.
а также непрерывные значения и служит полезным примером, который относительно
Легко понять. Поскольку понимание предметной области является важным аспектом при принятии решения
как кодировать различные категориальные значения - этот набор данных является хорошим примером.

Прежде чем мы начнем кодировать различные значения, нам необходимо
data и сделайте небольшую очистку.К счастью, pandas делает это просто:

 импортировать панд как pd
импортировать numpy как np

# Определить заголовки, поскольку в данных нет
headers = ["символизация", "normalized_losses", "make", "fuel_type", "aspiration",
           "num_doors", "body_style", "drive_wheels", "engine_location",
           «колесная_база», «длина», «ширина», «высота», «вес_среды»,
           "тип_двигателя", "число_цилиндров", "размер_двигателя", "топливная_система",
           "диаметр цилиндра", "ход", "степень сжатия", "мощность в лошадиных силах", "пиковая_об / мин",
           "city_mpg", "Highway_mpg", "price"]

# Прочитать CSV-файл и преобразовать "?" в NaN
df = pd.read_csv ("https://archive.ics.uci.edu/ml/machine-learning-databases/autos/imports-85.data",
                  header = None, names = headers, na_values ​​= "?" )
df.head ()
 
обозначение normalized_losses марка fuel_type стремление num_doors body_style диск engine_location wheel_base размер_двигателя fuel_system отверстие ход степень сжатия лошадиных сил пик_об / мин city_mpg Highway_mpg цена
0 3 NaN Альфа-Ромеро газ стандарт два кабриолет задний перед 88.6 130 mpfi 3,47 2,68 9,0 111,0 5000,0 21 27 13495,0
1 3 NaN Альфа-Ромеро газ стандарт два кабриолет задний перед 88,6 130 mpfi 3.47 2,68 9,0 111,0 5000,0 21 27 16500,0
2 1 NaN Альфа-Ромеро газ стандарт два хэтчбек задний перед 94,5 152 mpfi 2,68 3,47 9,0 154,0 5000.0 19 26 16500,0
3 2 164,0 audi газ стандарт четыре седан вперед перед 99,8 109 mpfi 3,19 3,40 10,0 102,0 5500,0 24 30 13950,0
4 2 164.0 audi газ стандарт четыре седан 4wd перед 99,4 136 mpfi 3,19 3,40 8,0 115,0 5500,0 18 22 17450,0

Последняя проверка, которую мы хотим сделать, это посмотреть, какие типы данных у нас есть:

символизация int64
normalized_losses float64
сделать объект
объект fuel_type
объект стремления
объект num_doors
body_style объект
объект drive_wheels
объект engine_location
wheel_base float64
длина float64
ширина float64
высота float64
curb_weight int64
объект engine_type
объект num_cylinders
engine_size int64
объект fuel_system
поплавок 64
ходовой поплавок64
сжатие_ratio float64
мощность, поплавок64
peak_rpm float64
city_mpg int64
Highway_mpg int64
цена float64
dtype: объект
 

Поскольку в этой статье основное внимание уделяется кодированию категориальных переменных,
мы собираемся включить только
объект

столбцы в нашем фрейме данных.Панды имеют
полезно
select_dtypes

функция, которую мы можем использовать для создания нового фрейма данных
содержащий только столбцы объекта.

 obj_df = df.select_dtypes (include = ['объект']). Copy ()
obj_df.head ()
 
марка fuel_type стремление num_doors body_style диск engine_location тип_двигателя кол-во_цилиндров fuel_system
0 Альфа-Ромеро газ стандарт два кабриолет задний перед dohc четыре mpfi
1 Альфа-Ромеро газ стандарт два кабриолет задний перед dohc четыре mpfi
2 Альфа-Ромеро газ стандарт два хэтчбек задний перед ohcv шесть mpfi
3 audi газ стандарт четыре седан вперед перед ОНЦ четыре mpfi
4 audi газ стандарт четыре седан 4wd перед ОНЦ пять mpfi

Прежде чем продолжить, в данных есть пара нулевых значений, которые
нам нужно навести порядок.

 obj_df [obj_df.isnull (). Any (axis = 1)]
 

Mazda

марка fuel_type стремление num_doors body_style диск engine_location тип_двигателя кол-во_цилиндров fuel_system
27 додж газ турбина NaN седан вперед перед ОНЦ четыре mpfi
63 дизель стандарт NaN седан вперед перед ОНЦ четыре иди

Для простоты заполните значение цифрой 4 (так как это
является наиболее частым значением):

 obj_df ["num_doors"].value_counts ()
 
четыре 114
два 89
Имя: num_doors, dtype: int64
 
 obj_df = obj_df.fillna ({"num_doors": "четыре"})
 

Теперь, когда у данных нет нулевых значений, мы можем рассмотреть варианты
для кодирования категориальных значений.

Подход № 1 - Найти и заменить

Прежде чем мы перейдем к некоторым из более «стандартных» подходов к кодированию категориальных
data, этот набор данных подчеркивает один потенциальный подход, который я называю «найти и заменить».

Есть два столбца данных, где значения представляют собой слова, используемые для представления
числа.В частности, количество цилиндров в двигателе и количество дверей в машине.
Pandas позволяет нам напрямую заменять текстовые значения их
числовой эквивалент с использованием
заменить

.

Мы уже видели, что данные num_doors включают только 2 или 4 двери. В
количество цилиндров включает всего 7 значений, и они легко переводятся в
действительные номера:

 obj_df ["число_цилиндров"]. Value_counts ()
 
четыре 159
шесть 24
пять 11
восемь 5
два 4
двенадцать 1
три 1
Имя: num_cylinders, dtype: int64
 

Если вы просмотрите
заменить

документации, вы можете видеть, что это мощный
команда с множеством опций.Для наших целей мы собираемся создать
словарь сопоставления, который содержит каждый столбец для обработки, а также словарь
значений для перевода.

Вот полный словарь для очистки
num_doors

и

num_cylinders

столбцы:

 cleanup_nums = {"num_doors": {"четыре": 4, "два": 2},
                "num_cylinders": {"четыре": 4, "шесть": 6, "пять": 5, "восемь": 8,
                                  «два»: 2, «двенадцать»: 12, «три»: 3}}
 

Для преобразования столбцов в числа с помощью
заменить

:

 obj_df = obj_df.заменить (cleanup_nums)
obj_df.head ()
 
марка fuel_type стремление num_doors body_style диск engine_location тип_двигателя кол-во_цилиндров fuel_system
0 Альфа-Ромеро газ стандарт 2 кабриолет задний перед dohc 4 mpfi
1 Альфа-Ромеро газ стандарт 2 кабриолет задний перед dohc 4 mpfi
2 Альфа-Ромеро газ стандарт 2 хэтчбек задний перед ohcv 6 mpfi
3 audi газ стандарт 4 седан вперед перед ОНЦ 4 mpfi
4 audi газ стандарт 4 седан 4wd перед ОНЦ 5 mpfi

Приятным преимуществом этого подхода является то, что pandas «знает» типы значений в
столбцы так что
объект

сейчас
int64

сделать объект
объект fuel_type
объект стремления
num_doors int64
body_style объект
объект drive_wheels
объект engine_location
объект engine_type
num_cylinders int64
объект fuel_system
dtype: объект
 

Хотя этот подход может работать только в определенных сценариях, это очень полезная демонстрация.
о том, как преобразовать текстовые значения в числовые, когда есть "легкая" человеческая интерпретация
данные.Эта концепция также полезна для более общей очистки данных.

Подход № 2 - Кодирование этикеток

Другой подход к кодированию категориальных значений заключается в использовании метода, называемого кодированием меток.
Кодирование метки - это просто преобразование каждого значения в столбце в число. Например,

body_style

столбец содержит 5 различных значений. Мы могли бы выбрать кодирование
это так:

  • кабриолет -> 0
  • жесткая крыша -> 1
  • хэтчбек -> 2
  • седан -> 3
  • вагон -> 4

Этот процесс напоминает мне о том, как Ральфи использовал свое секретное кольцо-декодер в «Рождественской истории»

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

 obj_df ["body_style"] = obj_df ["body_style"].astype ('категория')
obj_df.dtypes
 
сделать объект
объект fuel_type
объект стремления
num_doors int64
категория body_style
объект drive_wheels
объект engine_location
объект engine_type
num_cylinders int64
объект fuel_system
dtype: объект
 

Затем вы можете назначить закодированную переменную новому столбцу, используя
cat.codes

аксессуар:

 obj_df ["body_style_cat"] = obj_df ["body_style"].cat.codes
obj_df.head ()
 
марка fuel_type стремление num_doors body_style диск engine_location тип_двигателя кол-во_цилиндров fuel_system body_style_cat
0 Альфа-Ромеро газ стандарт 2 кабриолет задний перед dohc 4 mpfi 0
1 Альфа-Ромеро газ стандарт 2 кабриолет задний перед dohc 4 mpfi 0
2 Альфа-Ромеро газ стандарт 2 хэтчбек задний перед ohcv 6 mpfi 2
3 audi газ стандарт 4 седан вперед перед ОНЦ 4 mpfi 3
4 audi газ стандарт 4 седан 4wd перед ОНЦ 5 mpfi 3

Приятным аспектом этого подхода является то, что вы получаете преимущества категорий панд
(компактный размер данных, возможность заказа, поддержка построения графиков), но может быть легко преобразован в
числовые значения для дальнейшего анализа.

Подход № 3 - Одно горячее кодирование

Кодирование меток

имеет то преимущество, что оно простое, но имеет недостаток.
что числовые значения могут быть «неверно истолкованы» алгоритмами. Например, значение
0, очевидно, меньше значения 4, но действительно ли это соответствует
набор данных в реальной жизни? Вес фургона в 4 раза больше в наших расчетах?
чем кабриолет? В этом примере я так не думаю.

Обычный альтернативный подход называется одним горячим кодированием (но также используется несколько
разные названия показаны ниже).Несмотря на разные названия, основная стратегия
для преобразования каждого значения категории в новый столбец и присвоения 1 или 0 (Истина / Ложь)
значение в столбец. Это дает то преимущество, что значение не взвешивается неправильно, но
имеет обратную сторону добавления дополнительных столбцов в набор данных.

Pandas поддерживает эту функцию с помощью get_dummies. Эта функция называется
таким образом, потому что он создает фиктивные / индикаторные переменные (также известные как 1 или 0).

Надеюсь, простой пример прояснит это.Мы можем посмотреть на столбец

drive_wheels

где у нас есть значения
4wd

,
вперед

или
задний

.
Используя
get_dummies

мы можем преобразовать это в три столбца с 1 или 0, соответствующими
к правильному значению:

 pd.get_dummies (obj_df, columns = ["drive_wheels"]). Head ()
 
марка fuel_type стремление num_doors body_style engine_location тип_двигателя кол-во_цилиндров fuel_system body_style_cat drive_wheels_4wd drive_wheels_fwd drive_wheels_rwd
0 Альфа-Ромеро газ стандарт 2 кабриолет перед dohc 4 mpfi 0 0.0 0,0 1,0
1 Альфа-Ромеро газ стандарт 2 кабриолет перед dohc 4 mpfi 0 0,0 0,0 1,0
2 Альфа-Ромеро газ стандарт 2 хэтчбек перед ohcv 6 mpfi 2 0.0 0,0 1,0
3 audi газ стандарт 4 седан перед ОНЦ 4 mpfi 3 0,0 1,0 0,0
4 audi газ стандарт 4 седан перед ОНЦ 5 mpfi 3 1.0 0,0 0,0

Новый набор данных содержит три новых столбца:


  • drive_wheels_4wd

  • drive_wheels_rwd

  • drive_wheels_fwd

Эта функция мощная, потому что вы можете передать столько столбцов категорий, сколько захотите.
и выберите, как маркировать столбцы с помощью
префикс

. Правильное название сделает
остальной анализ просто немного проще.

 pd.get_dummies (obj_df, columns = ["body_style", "drive_wheels"], prefix = ["body", "drive"]). Head ()
 
марка fuel_type стремление num_doors engine_location тип_двигателя кол-во_цилиндров fuel_system body_style_cat кузов конвертируемый body_hardtop кузов_хэтчбек body_sedan body_wagon привод_4wd drive_fwd drive_rwd
0 Альфа-Ромеро газ стандарт 2 перед dohc 4 mpfi 0 1.0 0,0 0,0 0,0 0,0 0,0 0,0 1,0
1 Альфа-Ромеро газ стандарт 2 перед dohc 4 mpfi 0 1,0 0,0 0,0 0,0 0,0 0,0 0,0 1,0
2 Альфа-Ромеро газ стандарт 2 перед ohcv 6 mpfi 2 0.0 0,0 1,0 0,0 0,0 0,0 0,0 1,0
3 audi газ стандарт 4 перед ОНЦ 4 mpfi 3 0,0 0,0 0,0 1,0 0,0 0,0 1,0 0,0
4 audi газ стандарт 4 перед ОНЦ 5 mpfi 3 0.0 0,0 0,0 1,0 0,0 1,0 0,0 0,0

Еще одна концепция, о которой следует помнить, -
get_dummies

возвращает полный фрейм данных
поэтому вам нужно будет отфильтровать объекты с помощью
select_dtypes

когда ты
готовы сделать окончательный анализ.

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

Подход № 4 - Пользовательское двоичное кодирование

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

В этом конкретном наборе данных есть столбец с именем
engine_type

который содержит
несколько разных значений:

 obj_df ["тип_двигателя"].value_counts ()
 
ohc 148
ohcf 15
ohcv 13
l 12
dohc 12
ротор 4
dohcv 1
Имя: engine_type, dtype: int64
 

Ради обсуждения, возможно, все, что нас волнует, - это двигатель или нет
является верхний кулачок (OHC) или нет. Другими словами, все версии OHC одинаковы.
для этого анализа. Если это так, то мы могли бы использовать
ул.

аксессуар
плюс
нп, где

чтобы создать новый столбец, указывает,
имеет двигатель OHC.

 obj_df ["OHC_Code"] = np.where (obj_df ["engine_type"]. Str.contains ("ohc"), 1, 0)
 

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

Результирующий фрейм данных выглядит следующим образом (показывает только подмножество столбцов):

 obj_df [["make", "engine_type", "OHC_Code"]]. Head ()
 
марка тип_двигателя OHC_Code
0 Альфа-Ромеро dohc 1
1 Альфа-Ромеро dohc 1
2 Альфа-Ромеро ohcv 1
3 audi ОНЦ 1
4 audi ОНЦ 1

Этот подход может быть действительно полезен, если есть возможность консолидации в
простое значение Y / N в столбце.Это также подчеркивает важность домена
знание предназначено для решения проблемы наиболее эффективным способом.

Scikit-Learn

обновления scikit-learn

В предыдущей версии этой статьи использовалось
LabelEncoder

и
ЭтикеткаBinarizer

которые не рекомендуются для кодирования категориальных значений. Эти кодировщики
следует использовать только для кодирования целевых значений, а не значений характеристик.

В приведенных ниже примерах используется .
OrdinalEncoder

и
OneHotEncoder

какой
правильный подход к использованию для кодирования целевых значений.

В дополнение к подходу pandas, scikit-learn предоставляет аналогичную функциональность.
Лично я считаю, что использование pandas немного проще для понимания, но подход scikit
оптимально, когда вы пытаетесь построить прогнозную модель.

Например, если мы хотим сделать эквивалентную кодировке этикеток на марке автомобиля, нам нужно
для создания экземпляра
OrdinalEncoder

объект и
fit_transform

данные:

 из sklearn.preprocessing import OrdinalEncoder

ord_enc = OrdinalEncoder ()
obj_df ["make_code"] = ord_enc.fit_transform (obj_df [["make"]])
obj_df [["make", "make_code"]]. head (11)
 
марка make_code
0 Альфа-Ромеро 0
1 Альфа-Ромеро 0
2 Альфа-Ромеро 0
3 audi 1
4 audi 1
5 audi 1
6 audi 1
7 audi 1
8 audi 1
9 audi 1
10 bmw 2

Scikit-learn также поддерживает двоичное кодирование с использованием
OneHotEncoder.

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

 из sklearn.preprocessing import OneHotEncoder

oe_style = OneHotEncoder ()
oe_results = oe_style.fit_transform (obj_df [["body_style"]])
pd.DataFrame (oe_results.toarray (), columns = oe_style.categories _). head ()
 
кабриолет жесткая крыша хэтчбек седан универсал
0 1 0 0 0 0
1 1 0 0 0 0
2 0 0 1 0 0
3 0 0 0 1 0
4 0 0 0 1 0

Следующим шагом будет присоединение этих данных обратно к исходному фрейму данных.Вот пример:

 obj_df = obj_df.join (pd.DataFrame (oe_results.toarray (), columns = oe_style.categories_))
 

Ключевым моментом является то, что вам нужно использовать
toarray ()

преобразовать результаты в формат
который можно преобразовать в DataFrame.

Продвинутые подходы

Есть еще более продвинутые алгоритмы категориального кодирования. У меня нет
много личного опыта с ними, но ради завершения этого руководства я хотел
включить их.В этой статье представлены некоторые дополнительные технические
фон. Еще один приятный момент - автор статьи
создал пакет contrib scikit-learn под названием category_encoders, который
реализует многие из этих подходов. Это очень хороший инструмент для достижения этой цели.
проблема с другой точки зрения.

Вот краткое введение в использование библиотеки для некоторых других типов кодирования.
В первом примере мы попробуем выполнить кодирование обратной разницы.

Сначала мы получаем чистый фрейм данных и настраиваем
BackwardDifferenceEncoder

:

 import category_encoders as ce

# Получите новый чистый фрейм данных
obj_df = df.select_dtypes (include = ['объект']). copy ()

# Укажите столбцы для кодирования, затем поместите и трансформируйте
encoder = ce.BackwardDifferenceEncoder (cols = ["engine_type"])
encoder.fit_transform (obj_df, verbose = 1) .iloc [:, 8:14] .head ()
 
engine_type_0 engine_type_1 тип_двигателя_2 engine_type_3 engine_type_4 engine_type_5
0 -0,857143 -0.714286 -0,571429 -0,428571 -0,285714 -0,142857
1 -0,857143 -0,714286 -0,571429 -0,428571 -0,285714 -0,142857
2 0,142857 -0,714286 -0,571429 -0,428571 -0,285714 -0,142857
3 0,142857 0.285714 -0,571429 -0,428571 -0,285714 -0,142857
4 0,142857 0,285714 -0,571429 -0,428571 -0,285714 -0,142857

Интересно то, что видно, что результат не стандартный
1 и 0 мы видели в предыдущих примерах кодирования.

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

 энкодер = ce.PolynomialEncoder (cols = ["engine_type"])
encoder.fit_transform (obj_df, verbose = 1) .iloc [:, 8:14] .head ()
 
engine_type_0 engine_type_1 тип_двигателя_2 engine_type_3 engine_type_4 engine_type_5
0 -0,566947 0,545545 -0,408248 0,241747 -0,109109 0,032898
1 -0.566947 0,545545 -0,408248 0,241747 -0,109109 0,032898
2 -0,377964 0,000000 0,408248 -0,564076 0,436436 -0,197386
3 -0,188982 -0,327327 0,408248 0,080582 -0,545545 0,493464
4 -0.188982 -0,327327 0,408248 0,080582 -0,545545 0,493464

В этот пакет включено несколько различных алгоритмов и лучший способ
учиться - это попробовать их и посмотреть, поможет ли это вам с точностью вашего
анализ. Код, показанный выше, должен дать вам руководство о том, как подключить
другие подходы и посмотрите, какие результаты вы получите.

конвейеры scikit-learn

Использование трубопроводов

Этот раздел был добавлен в ноябре 2020 года.Цель - показать, как интегрировать
Функции кодирования функций scikit-learn в простой конвейер построения модели.

Как упоминалось выше, категориальные кодировщики scikit-learn позволяют включать преобразование
в ваши конвейеры, что может упростить процесс построения модели и избежать некоторых ошибок.
Я рекомендую это видео Data School в качестве хорошего вступления. Это также служит основой для подхода
изложены ниже.

Вот очень быстрый пример того, как подключить
OneHotEncoder

и
OrdinalEncoder

в трубопровод и используйте
cross_val_score

для анализа результатов:

 из sklearn.составить импорт make_column_transformer
из sklearn.linear_model import LinearRegression
из sklearn.pipeline import make_pipeline
из sklearn.model_selection импорт cross_val_score

# для целей этого анализа используйте только небольшой набор функций

feature_cols = [
    'fuel_type', 'make', 'aspiration', 'Highway_mpg', 'city_mpg',
    curb_weight, drive_wheels
]

# Удаляем пустые строки с ценами
df_ml = df.dropna (подмножество = ['цена'])

X = df_ml [feature_cols]
y = df_ml ['цена']
 

Теперь, когда у нас есть данные, давайте построим преобразователь столбцов:

 column_trans = make_column_transformer ((OneHotEncoder (handle_unknown = 'ignore'),
                                        ['fuel_type', 'make', 'drive_wheels']),
                                      (OrdinalEncoder (), ['стремление']),
                                      остаток = 'сквозной')
 

В этом примере показано, как применять разные типы кодировщиков для определенных столбцов.С использованием

остаток = 'сквозной'

аргумент для передачи всех числовых значений через конвейер
без изменений.

Для модели мы используем простую линейную регрессию, а затем строим конвейер:

 linreg = Линейная регрессия ()
pipe = make_pipeline (column_trans, linreg)
 

Выполните перекрестную проверку 10 раз, используя отрицательную среднюю абсолютную ошибку в качестве нашей оценки.
функция. Наконец, возьмите среднее из 10 значений, чтобы увидеть величину ошибки:

 cross_val_score (pipe, X, y, cv = 10, scoring = 'neg_mean_absolute_error').среднее (). круглый (2)
 

, что дает значение .
-2937,17.

Очевидно, что здесь можно провести гораздо больший анализ, но он предназначен для иллюстрации
как использовать функции scikit-learn в более реалистичном конвейере анализа.

Заключение

Кодирование категориальных переменных - важный шаг в процессе анализа данных.
Поскольку существует несколько подходов к кодированию переменных, важно
понять различные варианты и способы их реализации на ваших собственных наборах данных.В экосистеме науки о данных Python есть много полезных подходов к решению этих проблем.
Я призываю вас помнить об этих идеях в следующий раз, когда вы обнаружите, что анализируете
категориальные переменные. Чтобы узнать больше о коде в этой статье, не стесняйтесь
просмотреть ноутбук.

Изменения

  • 28 ноября 2020 г .: исправлены неработающие ссылки и обновлен раздел scikit-learn. Включенный пример трубопровода. Незначительные настройки кода для согласованности.
  • , ​​9 января 2021: исправлена ​​опечатка в примере OneHotEncoder.

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

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

Чтобы заменить значения в столбце на основе условия в Pandas DataFrame, вы можете использовать свойство DataFrame.loc или numpy.where ( ) или DataFrame.where ().

В этом руководстве мы рассмотрим все эти процессы на примерах программ.

Метод 1: DataFrame.loc - Заменить значения в столбце на основе условия

Чтобы заменить значения в столбце на основе условия, используя DataFrame.loc используйте следующий синтаксис.

  DataFrame.loc [условие, имя_столбца] = новое_значение  

В следующей программе мы заменим те значения в столбце «a», которые удовлетворяют условию, что значение меньше нуля.

Программа Python

  импортировать панды как pd

df = pd.DataFrame ([
[-10, -9, 8],
[6, 2, -4],
[-8, 5, 1]],
columns = ['a', 'b', 'c'])

df.loc [(df.a <0), 'a'] = 0
print (df)  

Запуск

Вывод

  a b c
0 0-9 8
1 6 2-4
2 0 5 1  

Вы также можете заменить значения несколькими значениями на основе одного условия.Передайте столбцы как кортеж в loc.

  DataFrame.loc [условие, (столбец_1, столбец_2)] = новое_значение  

В следующей программе мы заменим те значения в столбцах «a» и «b», которые удовлетворяют условию, что значение меньше нуля .

Программа Python

  импортировать панды как pd

df = pd.DataFrame ([
[-10, -9, 8],
[6, 2, -4],
[-8, 5, 1]],
columns = ['a', 'b', 'c'])

df.loc [(df.a <0), ('a', 'b')] = 0
print (df)  

Запуск

Вывод

  a b c
0 0 0 8
1 6 2-4
2 0 0 1  

Метод 2: Numpy.где - Заменить значения в столбце на основе условия

Чтобы заменить значения в столбце на основе условия, используя numpy.where, используйте следующий синтаксис.

  DataFrame ['column_name'] = numpy.where (condition, new_value, DataFrame.column_name)  

В следующей программе мы будем использовать метод numpy.where () и заменить те значения в столбце 'a', которые удовлетворяют условию, что значение меньше нуля.

Программа Python

  импортировать панды как pd
импортировать numpy как np

df = pd.DataFrame ([
[-10, -9, 8],
[6, 2, -4],
[-8, 5, 1]],
columns = ['a', 'b', 'c'])

df ['a'] = np.where ((df.a <0), 0, df.a)
print (df)  

Запуск

Вывод

  a b c
0 0-9 8
1 6 2-4
2 0 5 1  

Метод 3: DataFrame.where - замена значений в столбце на основе условия

Чтобы заменить значения в столбце на основе условия с помощью numpy.where, используйте следующий синтаксис.

  DataFrame ['column_name']. Где (~ (condition), other = new_value, inplace = True)  
  • column_name - это столбец, в котором значения должны быть заменены.
  • условие - это логическое выражение, которое применяется для каждого значения в столбце.
  • new_value заменяет (поскольку inplace = True) существующее значение в указанном столбце на основе условия.

В следующей программе мы будем использовать метод DataFrame.where () и заменим те значения в столбце «a», которые удовлетворяют условию, что значение меньше нуля.

Программа Python

  импортировать панды как pd

df = pd.DataFrame ([
[-10, -9, 8],
[6, 2, -4],
[-8, 5, 1]],
columns = ['a', 'b', 'c'])

df ['a']. где (~ (df.a <0), other = 0, inplace = True)
print (df)  

Запуск

Вывод

  a b c
0 0-9 8
1 6 2-4
2 0 5 1  

Резюме

В этом руководстве примеров Python мы узнали, как заменить значения столбца в DataFrame новым значением в зависимости от условия.

Замените NaN на среднее или среднее в Dataframe с помощью fillna () - thispointer.com

В этой статье мы обсудим, как заменить значения NaN на среднее значение в столбцах или строках, используя методы fillna () и mean ().

В аналитике данных мы иногда должны заполнить пропущенные значения, используя среднее значение столбца или среднее значение строки, чтобы провести анализ. Python предоставляет пользователям встроенные методы для решения проблемы с отсутствующими значениями или значениями NaN и очистки набора данных. Эти функции:

Dataframe.fillna ()

Метод fillna () используется для замены «NaN» во фрейме данных.Мы подробно обсудили аргументы fillna () в другой статье.

Метод mean ():

 среднее значение (ось = Нет, skipna = Нет, уровень = Нет, numeric_only = Нет, ** kwargs) 

Параметры:

  • ось: {индекс (0), столбцы (1)}
    • Ось, к которой будет применена функция.
  • skipna: bool, по умолчанию True:
    • Исключить значения NA / NULL при вычислении результата.
  • level: int или имя уровня, по умолчанию None:
    • Если ось является MultiIndex (иерархической), считать по определенному уровню, сворачиваясь в Series.
  • numeric_only: bool, default None Включить только столбцы типа float, int, boolean.
    • Если Нет, будет пытаться использовать все, а затем использовать только числовые данные. Не реализовано для серии.
  • ** kwargs: Дополнительные аргументы ключевого слова, передаваемые функции.

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

Возврат:

  • Возвращает среднее или среднее значение.

Теперь давайте посмотрим на несколько примеров функции fillna () и mean (),

.

Pandas: замените NaN на среднее значение столбца

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

Предположим, у нас есть фрейм данных, который содержит информацию о 4 студентах от S1 до S4 с оценками по разным предметам

 импортировать numpy как np
импортировать панд как pd

# Словарь со списком в качестве значений
sample_dict = {'S1': [10, 20, нп.NaN, np.NaN],
                'S2': [5, np.NaN, np.NaN, 29],
                'S3': [15, np.NaN, np.NaN, 11],
                'S4': [21, 22, 23, 25],
                "Предметы": ["Математика", "Финансы", "История", "География"]}

# Создать DataFrame из словаря
df = pd.DataFrame (sample_dict)
# Установить столбец 'Subjects' как индекс DataFrame
df = df.set_index ('Субъекты')

печать (df) 

Это DataFrame, который мы создали,

 S1 S2 S3 S4
Предметы
Математика 10.0 5,0 15,0 21
Финансы 20.0 NaN NaN 22
История NaN NaN NaN 23
География NaN 29,0 11,0 25
 

Если мы вычислим среднее значение в столбце «S2», то будет возвращено одно значение типа float.

 # получить среднее значение в столбце S2
среднее_значение = df ['S2']. mean ()

print ('Среднее значение в столбце S2:')
печать (среднее_значение) 

Выход:

 Среднее значение в столбце S2:
17,0 

Заменить значения NaN в столбце средним значением столбца

Теперь давайте заменим значения NaN в столбце S2 на среднее значение в том же столбце i.е. S2,

 # Заменить NaN в столбце S2 на
# среднее значение в том же столбце
df ['S2']. fillna (значение = df ['S2']. mean (), inplace = True)

print ('Обновленный фрейм данных:')
печать (df)
 

Выход:

 Обновленный фрейм данных:
             S1 S2 S3 S4
Предметы
Математика 10,0 5,0 15,0 21
Финансы 20.0 17.0 NaN 22
История NaN 17.0 NaN 23
География NaN 29,0 11.0 25 

Поскольку метод mean () вызывается из столбца «S2», аргумент значения имеет среднее значение из значений столбца «S2». Затем значения «NaN» в столбце «S2» были заменены значением, которое мы получили в аргументе «значение», то есть средним значением столбца «S2».

Заменить все значения NaN в кадре данных средним значением столбца

Теперь, если мы хотим изменить все значения NaN в DataFrame на среднее значение «S2», мы можем просто вызвать функцию fillna () со всем фреймом данных вместо определенного имени столбца.Позвольте мне показать вам, что я имею в виду, на примере

.

 # Заменить все NaN в фрейме данных на
# среднее значение в столбце
df.fillna (значение = df ['S2']. mean (), inplace = True)

print ('Обновленный фрейм данных:')
печать (df)
 

Выход:

 Обновленный фрейм данных:
             S1 S2 S3 S4
Предметы
Математика 10,0 5,0 15,0 21
Финансы 20,0 17,0 17,0 22
История 17.0 17.0 17.0 23
География 17.0 29,0 11,0 25
 

Обратите внимание, что все значения заменяются средним значением в столбце «S2». В приведенных выше примерах значений мы использовали «inplace = True» для внесения постоянных изменений в фрейм данных.

Мы даже можем использовать функцию update () для внесения необходимых обновлений.

 df.update (df ['S2']. Fillna (value = df ['S2']. Mean (), inplace = True)) 

Вышеупомянутая строка заменит NaN в столбце S2 на среднее значение в столбце S2.

Pandas: заменить NAN средним значением из нескольких столбцов

Давайте повторно инициализируем наш фрейм данных со значениями NaN,

 # Создать DataFrame из словаря
df = pd.DataFrame (sample_dict)
# Установить столбец 'Subjects' как индекс DataFrame
df = df.set_index ('Субъекты')

# Dataframe с NaN
печать (df)
 

Выход

 S1 S2 S3 S4
Предметы
Математика 10,0 5,0 15,0 21
Финансы 20.0 NaN NaN 22
История NaN NaN NaN 23
География NaN 29,0 11,0 25 

Теперь, если мы хотим работать с несколькими столбцами вместе, мы можем просто указать список столбцов при вызове функции mean ()

 # Среднее значение в столбцах S2 и S3
mean_values ​​= df [['S2', 'S3']].иметь в виду()

печать (среднее_значение)
 

Выход:

 S2 17,0
S3 13,0
dtype: float64
 

Он вернул серию, содержащую 2 значения, т.е. среднее значение в столбцах S2 и S3.

Теперь давайте заменим значения NaN в столбцах «S2» и «S3» на среднее значение в «S2» и «S3», возвращенное методом mean (). Атрибут «значение» имеет серию из 2 средних значений, которые заполняют значения NaN соответственно в столбцах «S2» и «S3».Здесь «значение» имеет тип «Серия»,

.

 # Заменить NaN в столбцах S2 и S3 на среднее значение
# в столбцах S2 и S3 соответственно
df [['S2', 'S3']] = df [['S2', 'S3']]. fillna (value = df [['S2', 'S3']]. mean ())

print ('Обновленный фрейм данных:')
печать (df)
 

Выход:

 Обновленный фрейм данных:
             S1 S2 S3 S4
Предметы
Математика 10,0 5,0 15,0 21
Финансы 20,0 17,0 13.0 22
История NaN 17.0 13.0 23
География NaN 29,0 11,0 25
 

Pandas: замените NAN средним значением строки

Мы также можем заполнить значения NaN средним по строке. Здесь значение NaN в строке «Финансы» будет заменено средним значением в строке «Финансы». Для этого нам нужно использовать .loc («имя индекса») для доступа к строке, а затем использовать методы fillna () и mean (). Здесь аргумент «значение» содержит только 1 значение, т.

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

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