English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
مثال على عمليات الفهرسة والبحث في Pandas
في هذا الفصل، سنناقش كيفية قطع وتقسيم التواريخ وكيفية الحصول على جزء من كائن Pandas.
عناصر تحكم Python وNumPy للوصول إلى عمليات الفهرسة [] وعمليات تحكم الخصائص . في مختلف الحالات يمكن الوصول بسهولة وسلاسة إلى بنيات البيانات Pandas. ولكن، نظرًا لأن نوع البيانات الذي سيتم الوصول إليه غير معروف مسبقًا، فإن استخدام العمليات القياسية المحددة بعض الشيء يوجد فيه بعض القيود على التكيف. نوصي باستخدام طرق الوصول المعدلة التي تم تقديمها في هذا الفصل للكود الإنتاجي.
يقدم Pandas ثلاثة أنواع من الفهرسات المتعددة المحاور: ذُكرت الثلاثة أنواع في الجدول أدناه-
فهرس | شرح |
.loc() | قائم على العلامات |
.iloc() | قائم على العددية |
.ix() | قائم على العلامات والعددية |
يقدم Pandas عدة طرق للوصول إلى الفهرس القائم على العلامات. عند القطع، تشمل الحواف أيضًا. العلامات العددية صالحة، لكنها تشير إلى العلامات وليس إلى المواقع.
.loc() يحتوي على عدة طرق للوصول، مثل:
علامة واحدة قائمة العلامات مفهوم القطع مجموعة منطقية
loc يحتاج إلى سلسلة من الأنواع الفرعية / القوائم / النطاقات، منفصلة بفاصلة. الأول يشير إلى السطر، والثاني يشير إلى الصف.
# 导入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
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
# 导入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
# 导入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
# 导入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
Pandas 提供了多种方法来获得纯粹基于整数的索引。像python和numpy一样,它们都是基于0的索引。
各种访问方法如下:
整数 整数列表 值范围
# 导入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
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
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
除了基于纯标签和基于整数的方法外,Pandas还提供了一种混合方法,用于使用.ix()运算符选择和子集对象。
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
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对象获取值使用以下符号:
对象 | 索引器 | 返回类型 |
Series | s.loc[indexer] | 标量值 |
DataFrame | df.loc[row_index,col_index] | Series 对象 |
Panel | p.loc[item_index,major_index, minor_index] | p.loc[item_index,major_index, minor_index] |
.iloc()和.ix()应用相同的索引选项和返回值。
我们看看如何对DataFrame对象执行每个操作。我们将使用基本索引运算符'[]'-
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
我们可以将值列表传递给[]以选择那些列
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
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