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

المؤشرات والاستعلامات في Pandas

مثال على عمليات الفهرسة والبحث في Pandas

في هذا الفصل، سنناقش كيفية قطع وتقسيم التواريخ وكيفية الحصول على جزء من كائن Pandas.
عناصر تحكم Python وNumPy للوصول إلى عمليات الفهرسة [] وعمليات تحكم الخصائص . في مختلف الحالات يمكن الوصول بسهولة وسلاسة إلى بنيات البيانات 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
الاسم: __، نوع البيانات: __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
الاسم: __، نوع البيانات: __float64

符号的使用

通过多轴索引从Pandas对象获取值使用以下符号:

对象索引器返回类型
Seriess.loc[indexer]标量值
DataFramedf.loc[row_index,col_index]Series 对象
Panelp.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
الاسم: __، نوع البيانات: __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
الاسم: __، نوع البيانات: __float64