جلسه سی و هفتم از کتاب مرجع پایتون برای علم دادهpython data science handbook
ایجاد کردن اشیای DataFrame
یک DataFrame را میتوان به روشهای مختلفی ایجاد کرد. ما چندین روش را به عنوان مثال می آوریم.
ایجاد کردن یک شی DataFrame پکیج pandas از طریق شی Series پکیج Pandas
In[23]: pd.DataFrame(population, columns=['population'])
Out[23]: population
California 38332521
Florida 19552860
Illinois 12882135
New York 19651127
Texas 26448193
ایجاد یک شی DataFrame از طریق یک لیست از دیکشنریها
هر لیست از دیکشنریها میتواند یک شی DataFrame را بسازد. ما از یک لیست ساده برای تولید داده مورد نیاز استفاده می کنیم.
In[24]: data = [{'a': i, 'b': 2 * i}
for i in range(3)]
pd.DataFrame(data)
Out[24]: a b
0 0 0
1 1 2
2 2 4
اگر بعضی از کلیدها در دیکشنری نباشند. Pandas آنها را با Nan به معنی not a number پر می کند:
In[25]: pd.DataFrame([{'a': 1, 'b': 2}, {'b': 3, 'c': 4}])
Out[25]: a b c
0 1.0 2 NaN
1 NaN 3 4.0
ایجاد شی DataFrame از طریق یک دیکشنری از اشیای Series
همانطور که قبلا دیدیم یک DataFrame را میتوان از یک دیکشنری از اشیای Series ساخت:
In[26]: pd.DataFrame({'population': population,
'area': area})
Out[26]: area population
California 423967 38332521
Florida 170312 19552860
Illinois 149995 12882135
New York 141297 19651127
Texas 695662 26448193
ایجاد DataFrame از آرایه Numpy دو بعدی
اگر آرایه دو بعدی از داده داشته باشیم یمتوایم یک شی DataFrame با هر ستون تخصیص یافته و نامهای index داشته باشیم. اگر از نام ستون و نام index چشم پوشی شده باشد ایندکس یک عدد صحیح خواهد بود:
In[27]: pd.DataFrame(np.random.rand(3, 2),
columns=['foo', 'bar'],
index=['a', 'b', 'c'])
Out[27]: foo bar
a 0.865257 0.213169
b 0.442759 0.108267
c 0.047110 0.905718
ایجاد شی DataFrame ز آرایه ساخت یافته Numpy
ما آرایه های ساخت یافته را در بخش آرایه های ساخت یافته Numpy در صفحه 92 کتاب پوشش دادیم. یک شی DataFrame از پکیج Pandas خیلی شبیه به آرایه ساخت یافته است و از آن بطور مستقیم تولید می شود:
In[28]: A = np.zeros(3, dtype=[('A', 'i8'), ('B', 'f8')])
A
Out[28]: array([(0, 0.0), (0, 0.0), (0, 0.0)],
dtype=[('A', 'i8'), ('B', 'f8')])
In[29]: pd.DataFrame(A)
Out[29]: A B
0 0 0.0
1 0 0.0
2 0 0.0
شی Index از پکیج Numpy
ما در اینجا اشیای Series و DataFrame پکیج pandas را مشاهده کردیم که شامل یک شی index صریح هستند که به شما اجازه می دهد داده را تغییر دهید و به داده ارجاع دهید. این شی Index یک ساختار جالب در خود دارد، این شی را میتوان یک آرایه غیر قابل تغییر تصور کرد یا یک مجموعه مرتب شده تصور کرد. (بطور فنی یک چند مجموعه ای ، مانند اشیای Index ممکن است که ارزشهای تکراری داشته باشند.)آن نگاه ها نتایج جالی دارند که در اشیای Index قابل استفاده هستند. به عنوان یک مثال ساده، یک شی Index را از لیستی از اعداد صحیح میسازیم:
In[30]: ind = pd.Index([2, 3, 5, 7, 11])
ind
Out[30]: Int64Index([2, 3, 5, 7, 11], dtype='int64')
شی Index به عنوان یک immutable array یا آرایه غیر قابل تغییر
شی Index در بسیاری ازحالتهاشبیه یک آرایه است.برای مثال ما میتوانیم از نشانه گذاری استاندارد ایندکسینگ پایتون برای بازیابی ارزشها یا تکه هایی slice هایی از ارزشها استفاده نماییم:
In[31]: ind[1]
Out[31]: 3
In[32]: ind[::2]
Out[32]: Int64Index([2, 5, 11], dtype='int64')
اشیای Index همچنین بسیار از خصوصیات آشنای آرایه های Numpy را دارند:
In[33]: print(ind.size, ind.shape, ind.ndim, ind.dtype)
5 (5,) 1 int64
یک تفاوت بین اشیای Index و آرایه های Numpy آن است که ایندکسها بصورت غیر قابل تغییر هستندکه به آن معنی است که آنها نمیتوانند با ابزارهای نرمال معمول تغییر کنند:
In[34]: ind[1] = 0
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
ipython-input-34-40e631c82e8a in module()
----1 ind[1] = 0
/Users/jakevdp/anaconda/lib/python3.5/site-packages/pandas/indexes/base.py ...
1243
1244 def __setitem__(self, key, value):
1245 raise TypeError("Index does not support mutable operations")
1246
1247 def __getitem__(self, key):
TypeError: Index does not support mutable operations
این غیر قابل تغییر بودن در اشیای Index آنها را این من می کند تا بتوان بین چندین شی ِDataFrame و آرایه ها به اشتراک گذاشت بدون اینکه بصورت باقوه عوارض جانبی از تغیغییرات اشتباهی ایندکس گذاری رخ دهد.
شی Index به عنوان یک مجموعه مرتب شده
اشیای Pandas طراحی شده اند تا عملیاتهای تسهیل کنندهمانند اتصالهای بین مجموعه های داده را فراهم کنند که بستگی به دیدگاههای بسیاری در حساب مجموعه ها دارد. شی Index از بسیاری قراردادهای مورد استفاده در ساختار داده set یا مجموعه درون ساخت پایتون پیروی می کند و بابراین اتحادها unions، intesections اشتراکها و دیگر ترکیبات را میتوان به روش مشابه محاسبه کرد:
In[35]: indA = pd.Index([1, 3, 5, 7, 9])
indB = pd.Index([2, 3, 5, 7, 11])
In[36]: indA & indB # intersection
Out[36]: Int64Index([3, 5, 7], dtype='int64')
In[37]: indA | indB # union
Out[37]: Int64Index([1, 2, 3, 5, 7, 9, 11], dtype='int64')
In[38]: indA ^ indB # symmetric difference
Out[38]: Int64Index([1, 2, 9, 11], dtype='int64')
به این عملیاتها میتوان از طریق عملیات شی index نیز دسترسی پیدا کرد مانند indA.itersection(indB)
Информация по комментариям в разработке