English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Индекс и запрос данных Pandas

Пример операций индексации и запросов Pandas

В этой главе мы будем обсуждать, как резать и разрезать даты, и как получить подмножество объектов Pandas.
Операторы индексации Python и NumPy «[]» и операторы свойств «.». Их можно быстро и легко использовать для доступа к структурам данных Pandas в различных случаях. Однако, поскольку заранее не известно тип данных, которые будут доступа, использование стандартных операторов имеет некоторые ограничения на оптимизацию. Для производственного кода мы рекомендуем использовать оптимизированные методы доступа к данным Pandas,介绍的 в этой главе.
Pandas теперь поддерживает три типа многоосевых индексов: в таблице ниже упоминаются три типа-

ИндексОбъяснение
.loc()На основе меток
.iloc()На основе целых чисел
.ix()На основе меток и целых чисел

.loc()

Pandas предоставляет различные методы для чистого индексирования на основе меток. При срезании включается также начательная граница. Целые числа являются эффективными метками, но они указывают на метки, а не на позиции.

.loc() Имеет различные методы доступа, например:

Одна метка Список меток Объект срез Булевая массив

loc Необходимо два оператора для одного/множества списков/диапазонов, разделенных запятыми. Первый указывает на строку, а второй на столбец.

Пример 1

# 导入pandas库并起别名pd
 import pandas as pd
 import numpy as np
 df = pd.DataFrame(np.random.randn(8, 4),
 index = ['a','b','c','d','e','f','g','h'], columns = ['A', 'B', 'C', 'D']
 # 选择特定列的所有行
 print(df.loc[:,'A'])

Результат выполнения:

  a   0.391548
b  -0.070649
c  -0.317212
d  -2.162406
e   2.202797
f   0.613709
g   1.050559
h        1.122680
Имя: A, тип данных: float64

Пример 2

   
 import pandas as pd
 import numpy as np
 df = pd.DataFrame(np.random.randn(8, 4),
 index = ['a','b','c','d','e','f','g','h'], columns = ['A', 'B', 'C', 'D']
 # Выбираем все строки для нескольких столбцов, например, list[]
 print(df.loc[:,['A','C']])

Результат выполнения:

          A        	        	        	        C
a        0.391548        0.745623
b        -0.070649        1.620406
c        -0.317212        1.448365
d        -2.162406        -0.873557
e        2.202797        0.528067
f        0.613709        0.286414
g        1.050559        0.216526
h        1.122680        -1.621420

Пример 3

# 导入pandas库并起别名pd
 import pandas as pd
 import numpy as np
 df = pd.DataFrame(np.random.randn(8, 4),
 index = ['a','b','c','d','e','f','g','h'], columns = ['A', 'B', 'C', 'D']
 # Выбираем несколько строк для нескольких столбцов, например, list[]
 print(df.loc[['a','b','f','h'],['A','C']])

Результат выполнения:

         A        	        	        	        C
a        0.391548        0.745623
b        -0.070649        1.620406
f        0.613709        0.286414
h        1.122680        -1.621420

Пример 4

# 导入pandas库并起别名pd
 import pandas as pd
 import numpy as np
 df = pd.DataFrame(np.random.randn(8, 4),
 index = ['a','b','c','d','e','f','g','h'], columns = ['A', 'B', 'C', 'D']
 # Выбираем диапазон строк для всех столбцов
 print(df.loc['a':'h'])

Результат выполнения:

          A        	        	        	        B        	        	        	        	        C        	        	        	        	        D
a        0.391548        -0.224297        0.745623        0.054301
b        -0.070649        -0.880130        1.620406        1.419743
c        -0.317212        -1.929698        1.448365        0.616899
d        -2.162406        0.614256        -0.873557        1.093958
e        2.202797        -2.315915        0.528067        0.612482
f        0.613709        -0.157674        0.286414        -0.500517
g        1.050559        -2.272099        0.216526        0.928449
h        1.122680        0.324368        -1.621420        -0.741470

Пример 5

# 导入pandas库并起别名pd
 import pandas as pd
 import numpy as np
 df = pd.DataFrame(np.random.randn(8, 4),
 index = ['a','b','c','d','e','f','g','h'], columns = ['A', 'B', 'C', 'D']
 # 用于使用布尔数组获取值
 print(df.loc['a']>0)

Результат выполнения:

   A  False
 B  True
 C  False
 D  False
 Name: a, dtype: bool

.iloc()

Pandas 提供了多种方法来获得纯粹基于整数的索引。像python和numpy一样,它们都是基于0的索引。
各种访问方法如下:

整数 整数列表 值范围

实例1

# 导入pandas库并起别名pd
 import pandas as pd
 import numpy as np
 df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])
 # 选择特定列的所有行
 print(df.iloc[:4])

Результат выполнения:

         A          B           C           D
0   0.699435   0.256239   -1.270702   -0.645195
1  -0.685354   0.890791   -0.813012    0.631615
2  -0.783192  -0.531378    0.025070    0.230806
3   0.539042  -1.284314    0.826977   -0.026251

Пример 2

import pandas as pd
 import numpy as np
 df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])
 # Целочисленный срез
 print(df.iloc[:4])
 print(df.iloc[1:5, 2:4])

Результат выполнения:

         A          B           C           D
0   0.699435   0.256239   -1.270702   -0.645195
1  -0.685354   0.890791   -0.813012    0.631615
2  -0.783192  -0.531378    0.025070    0.230806
3   0.539042  -1.284314    0.826977   -0.026251
           C          D
1  -0.813012   0.631615
2   0.025070   0.230806
3   0.826977  -0.026251
4   1.423332   1.130568

Пример 3

import pandas as pd
 import numpy as np
 df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])
 # 对值列表进行切片
 print(df.iloc[[1, 3, 5], [1, 3]])
 print(df.iloc[1:3, :])
 print(df.iloc[:,1:3])

Результат выполнения:

         B           D
1   0.890791    0.631615
3  -1.284314   -0.026251
5  -0.512888   -0.518930
           A           B           C           D
1  -0.685354    0.890791   -0.813012    0.631615
2  -0.783192   -0.531378    0.025070    0.230806
           B           C
0   0.256239   -1.270702
1   0.890791   -0.813012
2  -0.531378    0.025070
3  -1.284314    0.826977
4  -0.460729    1.423332
5  -0.512888    0.581409
6  -1.204853    0.098060
7  -0.947857    0.641358

.ix()

Кроме методов на основе чистых меток и методов на основе целых чисел, Pandas также предоставляет метод смешанного типа, который позволяет использовать оператор .ix() для выбора и подмножества объектов.

Пример 1

import pandas as pd
 import numpy as np
 df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])
 # Целочисленный срез
 print(df.ix[:4])

Результат выполнения:

         A          B           C           D
0   0.699435   0.256239   -1.270702   -0.645195
1  -0.685354   0.890791   -0.813012    0.631615
2  -0.783192  -0.531378    0.025070    0.230806
3   0.539042  -1.284314    0.826977   -0.026251

Пример 2

import pandas as pd
 import numpy as np
 df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])
 # Срез индексов
 print(df.ix[:,'A'])

Результат выполнения:

  0   0.699435
1  -0.685354
2  -0.783192
3   0.539042
4  -1.044209
5  -1.415411
6   1.062095
7   0.994204
Имя: A, тип данных: float64

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

Для получения значений из объектов Pandas с помощью многоосевого индекса используйте следующие символы:

ОбъектИндексаторВозвращаемый тип
Seriess.loc[indexer]Контрольная величина
DataFramedf.loc[row_index,col_index]Объект Series
Панельp.loc[item_index,major_index, minor_index]p.loc[item_index,major_index, minor_index]

.iloc() и .ix() применяются с одинаковыми параметрами индексации и возвращают одинаковые значения.

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

Пример 1

import pandas as pd
 import numpy as np
 df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])
 print(df['A'])

Результат выполнения:

  0  -0.478893
1   0.391931
2   0.336825
3  -1.055102
4  -0.165218
5  -0.328641
6   0.567721
7  -0.759399
Имя: A, тип данных: float64

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

Пример 2

import pandas as pd
 import numpy as np
 df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])
 print(df[['A','B']])

Результат выполнения:

         A           B
0  -0.478893   -0.606311
1   0.391931   -0.949025
2   0.336825    0.093717
3  -1.055102   -0.012944
4  -0.165218    1.550310
5  -0.328641   -0.226363
6   0.567721   -0.312585
7  -0.759399   -0.372696

Пример 3

import pandas as pd
 import numpy as np
 df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])
 print(df[2:2])

Результат выполнения:

   Столбцы: [A, B, C, D]
 Индекс: []

Доступ к свойствам

Можно использовать оператор атрибута “.” для выбора столбца.

Пример

import pandas as pd
 import numpy as np
 df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])
 print(df.A)

Результат выполнения:

  0   -0.478893
1    0.391931
2    0.336825
3   -1.055102
4   -0.165218
5   -0.328641
6    0.567721
7   -0.759399
Имя: A, тип данных: float64