4 способа добавления колонок в датафреймы pandas

Индексирование и сегментация массивов в Python

Для одномерных коллекций array применяются, операции сегментации и индексирования, описанные в разделе «Сегментация последовательностей в Python». Ниже разберем сегментацию с двумерными коллекциями array.

Выбор элемента двумерной коллекции array

Для выбора элемента двумерной коллекции array укажите кортеж с индексами строки и столбца элемента в квадратных скобках.

>>> import numpy as np
>>> grades = np.array(, , , ])
>>> gradesarray(,
       ,
       ,
       ])
>>> grades # строка 1, столбец 2
4

Выбор подмножества строк двумерной коллекции array

Для выбора одной строки укажите в квадратных скобках только один индекс:

>>> gradesarray()

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

>>> gradesarray(,
       ])

Для выбора нескольких несмежных строк используйте список индексов строк:

>>> grades]array(,
       ])

Выбор подмножества столбцов двумерной коллекции array

Для выбора подмножества столбцов следует указать кортеж, в котором указаны выбираемые строки и столбцы: 

>>> gradesarray()

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

Для выбора нескольких смежных столбцов используется синтаксис сегмента:

>>> gradesarray(,
       ,
       ,
       ])

Для выбора конкретных столбцов используйте список индексов этих строк:

>>> grades]array(,
       ,
       ,
       ])

Пример Pandas Groupby ()

Допустим, у нас есть файл CSV с контентом ниже.

ID,Name,Role,Salary
1,Pankaj,Editor,10000
2,Lisa,Editor,8000
3,David,Author,6000
4,Ram,Author,4000
5,Anupam,Author,5000

Мы будем использовать функцию Pandas Read_CSV (), чтобы прочитать файл CSV и создать объект DataFrame.

import pandas as pd

df = pd.read_csv('records.csv')

print(df)

Выход:

   ID    Name    Role  Salary
0   1  Pankaj  Editor   10000
1   2    Lisa  Editor    8000
2   3   David  Author    6000
3   4     Ram  Author    4000
4   5  Anupam  Author    5000

4.1) Средняя группа заработной платы по роли

Мы хотим узнать среднюю зарплату сотрудников на основе их роли. Таким образом, мы будем использовать функцию Groupby () для создания групп на основе «роли» столбца. Затем вызовите среднюю функцию совокупности (), чтобы рассчитать среднее и получить результат. Поскольку нам не нужны столбцы ID и имени, мы удалим их с вывода.

df_groupby_role = df.groupby()

# select only required columns
df_groupby_role = df_groupby_role]

# get the average
df_groupby_role_mean = df_groupby_role.mean()

print(df_groupby_role_mean)

Выход:

        Salary
Role          
Author    5000
Editor    9000

Индексы на выходе не выглядят хорошо. Мы можем исправить это, вызывая функцию RESET_INDEX ().

df_groupby_role_mean = df_groupby_role_mean.reset_index()
print(df_groupby_role_mean)

Выход:

     Role  Salary
0  Author    5000
1  Editor    9000

4.2) Общая зарплата, выплаченная ролью

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

df_salary_by_role = df.groupby()].sum().reset_index()
print(df_salary_by_role)

Выход:

     Role  Salary
0  Author   15000
1  Editor   18000

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

4.3) Общее количество сотрудников по роли

Мы можем использовать совокупную функцию размера (), чтобы получить эти данные.

df_size_by_role = df.groupby().size().reset_index()
df_size_by_role.columns.values = 'Count'  # renaming the size column
print(df_size_by_role)

Выход:

     Role  Count
0  Author      3
1  Editor      2

Удаление строк и столбцов из DataFrame

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

Использование словарного синтаксиса → Чтобы удалить столбец, мы будем использоватькак

del df

С помощьюФункция → Позволяет нам удалять столбцы, а также строки

Будем ли мы удалять строки или столбцы, решается вторым аргументом вфункция.

# Delete Column "age"df.drop('age',1)# Delete the Row with Index "3"df.drop(3,0)
# Delete Columns "name" & "age"df.drop(,1)# Delete Rows with index "2","3", & "4"df.drop(,0)

Как создать Pandas DataFrame?

В реальном миреPanda DataFrameбудет создан путем загрузки наборов данных из постоянного хранилища, включая, помимо прочего, базы данных excel, csv и MySQL.

Как показано на листе Excel выше, если мы рассматриваем имена столбцов как«Ключи»и список предметов под этим столбцом как»Значения»мы можем легко использовать словарь Python для представления так же, как

my_dict = {      'name' : ,     'age' : ,     'designation': }

Мы можем создатьПанды DataFrameиз этого словаря как

import Pandas as pddf = pd.DataFrame(my_dict)

Результирующий DataFrame должен выглядеть аналогично тому, что мы видели на листе Excel выше, как


Результат -> df = pd.DataFrame (my_dict)

Создание DataFrame Pandas из списка

Что если мы получим набор данных без каких-либо столбцов?

Что ж,Панды DataFrameне обращайте на это внимания и генерируйте DataFrame, неявно добавляя для нас индекс строки и заголовки столбцов.

Например, если мы создадим DataFrame из списка ниже

my_list = ,           ,           ,           ,           ]df = pd.DataFrame(my_list)

Это будет выглядеть так

df = pd.DataFrame (my_list)

Если мы не хотимПанды DataFrameчтобы автоматически генерировать индексы строк и имена столбцов, мы можем передать их вфункционировать как

df = pd.DataFrame(my_list, index = , columns = )

А вот как это будет выглядеть

df с предоставленной строкой и столбцом

Следует отметить, что мы также можем создать Pandas DataFrame из массивов NumPy как

Изменение размеров и транспонирование массива в Python

В NumPy существует много возможностей для изменения размера массивов.

8.1. Метод resize

Метод resize изменяет размер исходной коллекции array:

>>> import numpy as np
>>> numbers = np.array()
>>> numbersarray()
>>> numbers.resize(3, 2)
>>> numbersarray(,
       ,
       ])

8.2. Методы flatten и ravel

Метод flatten выполняет глубокое копирование данных исходной коллекции

>>> import numpy as np
>>> numbers = np.array()
>>> numbers_fl = numbers.flatten()
>>> numbers_flarray()

Чтобы проверить что numbers и numbers_fl  не используют общие данные изменим элемент numbers_fl и выведем оба массива:

>>> numbers_fl[] = 77
>>> numbers_flarray()
>>> numbersarray()

Значение в numbers_fl  изменилось, значит массивы уже не связаны между собой. 

метод ravel создает представление (поверхностную копию) исходной коллекции array, которое использует общие данные.

>>> numbersarray()
>>> numbers_ra = numbers.ravel()
>>> numbers_raarray()

Чтобы проверить использование общих данных, изменим один элемент numbers_ra:

>>> numbers_ra[] =125
>>> numbers_raarray()
>>> numbersarray()

В результате значения поменялись в обоих массивах.

8.3. Транспонирование строк и столбцов

С помощью атрибута T вы можете быстро транспонировать строки и столбцы маcсива, то есть сделать так чтобы строки стали столбцами, а столбцы строками. 

>>> import numpy as np
>>> numbers = np.array(, ])
>>> numbersarray(,
       ])
>>> numbers.Tarray(,
       ,
       ])

Транспонирование не изменяет исходную коллекцию array.

8.4. Горизонтальное и вертикальное дополнение. Функции hstack и vstack

Добавление новых строк или столбцов, называется горизонтальным или вертикальным дополнением. Допустим у нас есть две коллекции array, и мы хотим объединить их в одну. Для этого можно воспользоваться функцией hstack() из библиотеки NumPy. Функцие hstack() передается кортеж с объединяемыми коллекциями:

>>> import numpy as np
>>> numbers_1 = np.array()
>>> numbers_2 = np.array()
>>> np.hstack((numbers_1, numbers_2))array()

В случае если нам требуется объединить массивы добавлением, можно воспользоваться функцией vstack():

>>> np.vstack((numbers_1, numbers_2))array(,
       ])

Please enable JavaScript to view the comments powered by Disqus.

Нан в Numpy

Давайте посмотрим, как работает NAN под Numpy. Для наблюдения за свойствами NAN давайте создадим NAN-массив с значениями NAN.

import numpy as np
arr = np.array() 
pritn(arr) 

Выход:

1. Математические операции на NaMy Array с NAN

Давайте попробуем вызвать некоторые основные функции на Numpy Array.

print(arr.sum())

Выход:

nan

Давайте попробуйте найти максимум от массива:

print(arr.max())

Выход:

nan

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

2. Как игнорировать значения NAN при выполнении математических операций на Numpy Array

Numpy предлагает вам методы, такие как NP.NANSUM () и NP.NANMAX (), чтобы рассчитать сумму и MAX после игнорирования значений NAN в массиве.

np.nansum(arr)

Выход:

19.0
np.nanmax(arr) 
6.0

Если у вас есть автозаполнение в своей IDE, вы увидите следующий список опций во время работы с NP.NAN:

3. Проверка значений NAN

Чтобы проверить значения NAN в NAMPY MARY, вы можете использовать метод NP.ISNAN ().

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

np.isnan(arr)

Выход:

Выходной массив имеет True для индексов, которые являются Nans в исходном массиве и ложь для остальных.

4. Приравнять два нанда

Две назы, равные друг другу?

Это может быть запутанным вопросом. Давайте попробуем ответить на него, запустив код Python.

a = np.nan
b = np.nan

Эти два утверждения инициализируют две переменные, A и B с NAN. Попробуем приравнивать два.

a == b

Выход:

False

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

a is b

Выход:

True 

Причина этого является то, что сравнивает значения как операндов, так и проверки на равенство стоимости. С другой стороны, проверяет ли оба операнды к одному и тому же объекту или нет.

На самом деле, вы можете распечатать идентификаторы как A и B и увидеть, что они относятся к одному и тому же объекту.

id(a)

Выход:

139836725842784
id(b)

Выход:

139836725842784

Numpy и Pandas — лучшие друзья Data Scienctist’а

На практике при решении задач Data Science и Machine Learning приходится работать с обеими рассмотренными библиотеками, т.к. они позволяют быстро и просто обрабатывать большие объемы данных. Даже на онлайн-площадке соревнований по машинному обучению Kaggle обычно первые строчки кода программистов начинаются с , а ниже можно увидеть операцию чтения датасета — . Действительно, в первую очередь необходимо взглянуть на датасет, проанализировать его, построить необходимые графики. Здесь и нужен Pandas.

NumPy, в свою очередь, используется практически в везде, включая другие библиотеки Python, связанные с Data Science и Machine Learning. Например, уже упомянутый Pandas, Seaborn, Statsmodel, в анализе сигналов — Scipy, PyWavelets, в обработке изображений — Scikit-learn и OpenCV, в симуляции моделей — PyDSTool, в глубоком обучении — Keras . Таким образом, эти простые библиотеки являются фундаментом Data Science в Python.

В следующей статье мы продолжим разговор о библиотеках машинного обучения и рассмотрим четыре самых востребованных из них по версии Kaggle. А практические навыки работы с NumPy и Pandas вы получите на курсах по Python в нашем лицензированном учебном центре обучения и повышения квалификации ИТ-специалистов в Москве.

Смотреть расписание
Записаться на курс

Источники

Использование только с условием

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

import random
import numpy as np

a = np.random.randn(2, 3)
b = np.where(a > 0)
print(b)

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

(array(), array())

Если вы внимательно посмотрите, b теперь представляет собой кортеж из множества массивов. И в каждом массиве находится положительный элемент. Что это значит? Всякий раз, когда мы предоставляем только условие, эта функция фактически эквивалентна np.asarray.nonzero().

В нашем примере np.asarray (a> 0) вернет логический массив после применения условия, а np.nonzero (arr_like) вернет индексы ненулевых элементов arr_like.

Рассмотрим более простой пример:

import numpy as np

a = np.arange(10)

b = np.where(a < 5, a, a * 10)

print(a)
print(b)

Здесь условием является <5, что будет массивом типа numpy , x – это массив a, а y – массив a * 10. Итак, мы выбираем из только если a <5, и от a * 10, если a> 5.

Таким образом, все элементы> = 5 преобразуются путем умножения на 10. Это действительно то, что мы получаем!

Метод 1: использование astype()

DataFrame.astype() приводит этот DataFrame к указанному типу данных. Ниже приводится синтаксис метода.

astype(dtype, copy=True, errors='raise', **kwargs)

Нас интересует только первый аргумент dtype – это тип данных или dict имени столбца.

Итак, давайте использовать метод astype() с аргументом dtype, чтобы изменить тип данных одного или нескольких столбцов DataFrame.

Как изменить тип данных одного столбца?

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

В следующей программе мы изменим тип данных столбца a на float.

import pandas as pd
import numpy as np

#initialize a dataframe
df = pd.DataFrame(
	,
	,
	,
	],
	columns=)

print('Previous Datatypes\n', df.dtypes, sep='') 

#change datatype of column
df = df.astype({'a': np.float})

#print results
print('\nNew Datatypes\n', df.dtypes, sep='') 
print('\nDataFrame\n', df, sep='')

Вывод:

Previous Datatypes
a    int64
b    int64
c    int64
dtype: object

New Datatypes
a    float64
b      int64
c      int64
dtype: object

DataFrame
      a   b   c
0  21.0  72  67
1  23.0  78  62
2  32.0  74  54
3  52.0  54  76

Как изменить тип данных нескольких столбцов?

Теперь давайте изменим тип данных более чем для одного столбца. Все, что нам нужно сделать, это предоставить больше пар column_name: datatype key:value в аргументе метода astype().

В следующей программе мы изменим тип данных столбца a на float, а b на int8.

import pandas as pd
import numpy as np

#initialize a dataframe
df = pd.DataFrame(
	,
	,
	,
	],
	columns=)

print('Previous Datatypes\n', df.dtypes, sep='') 

#change datatype of column
df = df.astype({'a': np.float, 'b': np.int8})

#print results
print('\nNew Datatypes\n', df.dtypes, sep='') 
print('\nDataFrame\n', df, sep='')

Вывод:

Previous Datatypes
a    int64
b    int64
c    int64
dtype: object

New Datatypes
a    float64
b       int8
c      int64
dtype: object

DataFrame
      a   b   c
0  21.0  72  67
1  23.0  78  62
2  32.0  74  54
3  52.0  54  76

Как изменить тип данных всех столбцов?

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

В следующей программе мы изменим тип данных всех столбцов на float.

import pandas as pd
import numpy as np

#initialize a dataframe
df = pd.DataFrame(
	,
	,
	,
	],
	columns=)

print('Previous Datatypes\n', df.dtypes, sep='') 

#change datatype of column
df = df.astype(np.float)

#print results
print('\nNew Datatypes\n', df.dtypes, sep='') 
print('\nDataFrame\n', df, sep='')

Вывод:

Previous Datatypes
a    int64
b    int64
c    int64
dtype: object

New Datatypes
a    float64
b    float64
c    float64
dtype: object

DataFrame
      a     b     c
0  21.0  72.0  67.0
1  23.0  78.0  62.0
2  32.0  74.0  54.0
3  52.0  54.0  76.0

Dataframe loc [] примеры

Давайте посмотрим на некоторые примеры использования атрибута объекта DataFrame. Но, во-первых, мы создадим образец DataFrame для нас для использования.

import pandas as pd

d1 = {'Name': , 'ID': , 'Role': }

df = pd.DataFrame(d1)

print('DataFrame:\n', df)

Выход:

DataFrame:
    Name  ID Role
0  John   1  CEO
1  Jane   2  CTO
2  Mary   3  CFO

1. loc [] с одной этикеткой

row_1_series = df.loc
print(type(row_1_series))
print(df.loc)

Выход:


Name    Jane
ID         2
Role     CTO
Name: 1, dtype: object
row_0_2_df = df.loc]
print(type(row_0_2_df))
print(row_0_2_df)

Выход:


   Name  ID Role
0  John   1  CEO
2  Mary   3  CFO

3. Получение единого значения

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

jane_role = df.loc
print(jane_role)  # CTO

4. Ломтик с LOC []

Мы также можем передавать ломтик этикеток в том случае, в этом случае этикетки начала и остановки будут включены в объект серии результатов.

roles = df.loc
print(roles)

Выход:

0    CEO
1    CTO
Name: Role, dtype: object

5. loc [] С массивом логических ценностей

row_1_series = df.loc]
print(row_1_series)

Выход:

   Name  ID Role
1  Jane   2  CTO

Поскольку содержит DataFrame 3 строк, длина массива должна быть 3. Если аргумент логической длины массива не совпадает с длиной оси, IndexError: вещь неправильная длина Поднялся.

6. LOC [] с условными утверждениями

data = df.loc > 1]
print(data)

Выход : DataFrame строк, где идентификатор больше 1.

   Name  ID Role
1  Jane   2  CTO
2  Mary   3  CFO

7. DataFrame LOC [] с Callable Function

Мы также можем использовать функцию лямбда с атрибутом dataframe loc [].

id_2_row = df.loc == 2]
print(id_2_row)

Выход:

   Name  ID Role
1  Jane   2  CTO
Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Все про сервера
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: