<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>обучение Python pandas - Python 3 | Data Science | Нейронные сети | AI - Искусственный Интеллект</title>
	<atom:link href="https://python.ivan-shamaev.ru/tag/%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5-python-pandas/feed/" rel="self" type="application/rss+xml" />
	<link>https://python.ivan-shamaev.ru/tag/обучение-python-pandas/</link>
	<description>Библиотеки обработки данных. Примеры. Строки, списки, файлы, числа, массивы. Язык программирования Python 3 - скачать</description>
	<lastBuildDate>Thu, 16 Apr 2020 03:34:26 +0000</lastBuildDate>
	<language>ru-RU</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.6.4</generator>

<image>
	<url>https://python.ivan-shamaev.ru/wp-content/uploads/2019/04/cropped-data_science_python3_logo-32x32.png</url>
	<title>обучение Python pandas - Python 3 | Data Science | Нейронные сети | AI - Искусственный Интеллект</title>
	<link>https://python.ivan-shamaev.ru/tag/обучение-python-pandas/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>5 Полезных функций Python Pandas для Data Science</title>
		<link>https://python.ivan-shamaev.ru/5-useful-functions-of-pandas-python-for-data-science/</link>
					<comments>https://python.ivan-shamaev.ru/5-useful-functions-of-pandas-python-for-data-science/#respond</comments>
		
		<dc:creator><![CDATA[Шамаев Иван]]></dc:creator>
		<pubDate>Thu, 16 Apr 2020 02:26:43 +0000</pubDate>
				<category><![CDATA[Pandas. Обработка данных]]></category>
		<category><![CDATA[python pandas]]></category>
		<category><![CDATA[обучение Python pandas]]></category>
		<category><![CDATA[полезные функции pandas python]]></category>
		<category><![CDATA[учебник python pandas]]></category>
		<category><![CDATA[функции python pandas]]></category>
		<guid isPermaLink="false">https://python.ivan-shamaev.ru/?p=962</guid>

					<description><![CDATA[<p>В повседневной обработке данных для проектов машинного обучения и data science библиотека Python Pandas является одной из наиболее часто используемых. shift() &#8212; функция Python Pandas Предположим, вы столкнулись с ситуацией, когда вам нужно сместить все строки в DataFrame или использовать цену акций предыдущего дня в DataFrame. Может быть, мы хотим построить среднюю температуру за последние [&#8230;]</p>
<p>Сообщение <a href="https://python.ivan-shamaev.ru/5-useful-functions-of-pandas-python-for-data-science/">5 Полезных функций Python Pandas для Data Science</a> появились сначала на <a href="https://python.ivan-shamaev.ru">Python 3 | Data Science | Нейронные сети | AI - Искусственный Интеллект</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><a class="a2a_button_telegram" href="https://www.addtoany.com/add_to/telegram?linkurl=https%3A%2F%2Fpython.ivan-shamaev.ru%2F5-useful-functions-of-pandas-python-for-data-science%2F&amp;linkname=5%20%D0%9F%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D1%8B%D1%85%20%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B9%20Python%20Pandas%20%D0%B4%D0%BB%D1%8F%20Data%20Science" title="Telegram" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_whatsapp" href="https://www.addtoany.com/add_to/whatsapp?linkurl=https%3A%2F%2Fpython.ivan-shamaev.ru%2F5-useful-functions-of-pandas-python-for-data-science%2F&amp;linkname=5%20%D0%9F%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D1%8B%D1%85%20%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B9%20Python%20Pandas%20%D0%B4%D0%BB%D1%8F%20Data%20Science" title="WhatsApp" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=https%3A%2F%2Fpython.ivan-shamaev.ru%2F5-useful-functions-of-pandas-python-for-data-science%2F&amp;linkname=5%20%D0%9F%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D1%8B%D1%85%20%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B9%20Python%20Pandas%20%D0%B4%D0%BB%D1%8F%20Data%20Science" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_linkedin" href="https://www.addtoany.com/add_to/linkedin?linkurl=https%3A%2F%2Fpython.ivan-shamaev.ru%2F5-useful-functions-of-pandas-python-for-data-science%2F&amp;linkname=5%20%D0%9F%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D1%8B%D1%85%20%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B9%20Python%20Pandas%20%D0%B4%D0%BB%D1%8F%20Data%20Science" title="LinkedIn" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_vk" href="https://www.addtoany.com/add_to/vk?linkurl=https%3A%2F%2Fpython.ivan-shamaev.ru%2F5-useful-functions-of-pandas-python-for-data-science%2F&amp;linkname=5%20%D0%9F%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D1%8B%D1%85%20%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B9%20Python%20Pandas%20%D0%B4%D0%BB%D1%8F%20Data%20Science" title="VK" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_twitter" href="https://www.addtoany.com/add_to/twitter?linkurl=https%3A%2F%2Fpython.ivan-shamaev.ru%2F5-useful-functions-of-pandas-python-for-data-science%2F&amp;linkname=5%20%D0%9F%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D1%8B%D1%85%20%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B9%20Python%20Pandas%20%D0%B4%D0%BB%D1%8F%20Data%20Science" title="Twitter" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_email" href="https://www.addtoany.com/add_to/email?linkurl=https%3A%2F%2Fpython.ivan-shamaev.ru%2F5-useful-functions-of-pandas-python-for-data-science%2F&amp;linkname=5%20%D0%9F%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D1%8B%D1%85%20%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B9%20Python%20Pandas%20%D0%B4%D0%BB%D1%8F%20Data%20Science" title="Email" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fpython.ivan-shamaev.ru%2F5-useful-functions-of-pandas-python-for-data-science%2F&#038;title=5%20%D0%9F%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D1%8B%D1%85%20%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B9%20Python%20Pandas%20%D0%B4%D0%BB%D1%8F%20Data%20Science" data-a2a-url="https://python.ivan-shamaev.ru/5-useful-functions-of-pandas-python-for-data-science/" data-a2a-title="5 Полезных функций Python Pandas для Data Science"></a></p><p>В повседневной обработке данных для проектов машинного обучения и data science библиотека Python Pandas является одной из наиболее часто используемых.</p>
<h2><strong><span style="color: #ff6600;">shift()</span> &#8212; функция Python Pandas</strong></h2>
<p>Предположим, вы столкнулись с ситуацией, когда вам нужно сместить все строки в DataFrame или использовать цену акций предыдущего дня в DataFrame. Может быть, мы хотим построить среднюю температуру за последние три дня в наборе данных.</p>
<p><strong>Shift()</strong> будет идеальным способом для достижения всех этих целей.</p>
<p><strong>Функция Pandas Shift()</strong>, сдвигает индекс на желаемое количество периодов. Эта функция принимает скалярный параметр, называемый периодом, который представляет количество сдвигов для желаемой оси. Эта функция полезна при работе с данными временных рядов. Мы можем использовать <strong>fill_value</strong> для заполнения за пределами граничных значений.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">import pandas as pd
import numpy as np
df = pd.DataFrame({'DATE': [1, 2, 3, 4, 5],
                   'VOLUME': [100, 200, 300,400,500],
                   'PRICE': [214, 234, 253,272,291]})
print(df)

===РЕЗУЛЬТАТ===
    DATE  VOLUME  PRICE
0     1     100    214
1     2     200    234
2     3     300    253
3     4     400    272
4     5     500    291

print(df.shift(1))

===РЕЗУЛЬТАТ===
DATE  VOLUME  PRICE
0   NaN     NaN    NaN
1   1.0   100.0  214.0
2   2.0   200.0  234.0
3   3.0   300.0  253.0
4   4.0   400.0  272.0

# with fill_Value = 0
print(df.shift(1,fill_value=0))

===РЕЗУЛЬТАТ===
DATE  VOLUME  PRICE
0     0       0      0
1     1     100    214
2     2     200    234
3     3     300    253
4     4     400    272</pre>
<p><a href="https://python.ivan-shamaev.ru/wp-content/uploads/2020/04/1_5_Elegant_Python_Pandas_Functions.png"><img fetchpriority="high" decoding="async" src="https://python.ivan-shamaev.ru/wp-content/uploads/2020/04/1_5_Elegant_Python_Pandas_Functions.png" alt="" width="1400" height="1483" class="aligncenter size-full wp-image-967" srcset="https://python.ivan-shamaev.ru/wp-content/uploads/2020/04/1_5_Elegant_Python_Pandas_Functions.png 1400w, https://python.ivan-shamaev.ru/wp-content/uploads/2020/04/1_5_Elegant_Python_Pandas_Functions-283x300.png 283w, https://python.ivan-shamaev.ru/wp-content/uploads/2020/04/1_5_Elegant_Python_Pandas_Functions-967x1024.png 967w, https://python.ivan-shamaev.ru/wp-content/uploads/2020/04/1_5_Elegant_Python_Pandas_Functions-768x814.png 768w" sizes="(max-width: 1400px) 100vw, 1400px" /></a></p>
<p><span>Теперь, если нам нужно получить цену акций предыдущего дня в виде нового столбца, мы можем использовать сдвиг с помощью функции shift():</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">df['PREV_DAY_PRICE'] = df['PRICE'].shift(1,fill_value=0)
print(df)

===Результат===
DATE  VOLUME  PRICE  PREV_DAY_PRICE
0     1     100    214               0
1     2     200    234             214
2     3     300    253             234
3     4     400    272             253
4     5     500    291             272</pre>
<p><span>Мы можем легко рассчитать среднюю цену акций за последние три дня, как показано ниже, и создать новый столбец функций.</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">df['LAST_3_DAYS_AVE_PRICE'] = (df['PRICE'].shift(1,fill_value=0) + 
                               df['PRICE'].shift(2,fill_value=0) + 
                               df['PRICE'].shift(3,fill_value=0))/3</pre>
<p><span>Теперь DataFrame станет таким:</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">DATE  VOLUME  PRICE     LAST_3_DAYS_AVE_PRICE
0     1     100    214               0.000000
1     2     200    234              71.333333
2     3     300    253             149.333333
3     4     400    272             233.666667
4     5     500    291             253.000000</pre>
<p>Мы также можем сдвигаться вперед, чтобы получить значение из следующего временного периода или следующего значения в ряду (не обязательно это должен быть период).</p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">df['TOMORROW_PRICE'] = df['PRICE'].shift(-1,fill_value=0)</pre>
<p><span>Теперь фрейм данных будет:</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">DATE  VOLUME  PRICE     TOMORROW_PRICE
0     1     100    214             234
1     2     200    234             253
2     3     300    253             272
3     4     400    272             291
4     5     500    291               0</pre>
<p><span>Более подробную информацию о параметрах и других настройках см. в </span><a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.shift.html?highlight=shift#pandas.Series.shift" class="cq ih ks kt ku kv" target="_blank" rel="noopener nofollow noreferrer"><span>документации Pandas</span></a><span>.</span></p>
<h2><strong><span style="color: #ff6600;">value_counts()</span> &#8212; функция Python Pandas</strong></h2>
<p>Функция Pandas value_counts() возвращает объект, содержащий количество уникальных значений. Полученный объект можно отсортировать в порядке убывания или в порядке возрастания, включить NA или исключить NA посредством управления параметрами. Эта функция может использоваться с индексами в DataFrames или Pandas Series.</p>
<p><a href="https://python.ivan-shamaev.ru/wp-content/uploads/2020/04/2_5_Elegant_Python_Pandas_Functions-1.png"><img decoding="async" src="https://python.ivan-shamaev.ru/wp-content/uploads/2020/04/2_5_Elegant_Python_Pandas_Functions-1.png" alt="" width="947" height="579" class="aligncenter size-full wp-image-976" srcset="https://python.ivan-shamaev.ru/wp-content/uploads/2020/04/2_5_Elegant_Python_Pandas_Functions-1.png 947w, https://python.ivan-shamaev.ru/wp-content/uploads/2020/04/2_5_Elegant_Python_Pandas_Functions-1-300x183.png 300w, https://python.ivan-shamaev.ru/wp-content/uploads/2020/04/2_5_Elegant_Python_Pandas_Functions-1-768x470.png 768w" sizes="(max-width: 947px) 100vw, 947px" /></a></p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">a = pd.Index([3,3,4,2,1,3, 1, 2, 3, 4, np.nan,4,6,7])
print(a.value_counts())

===РЕЗУЛЬТАТ===
3.0    4
4.0    3
1.0    2
2.0    2
7.0    1
6.0    1
dtype: int64</pre>
<p><span>Ниже приведен пример Series.</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">#In
b = pd.Series(['ab','bc','cd',1,'cd','cd','bc','ab','bc',1,2,3,2,3,np.nan,1,np.nan])
b.value_counts()

#Out
bc    3
cd    3
1     3
3     2
ab    2
2     2
dtype: int64</pre>
<p><span><strong>Опция Bin</strong> может использоваться вместо подсчета уникальных значений значений, разделив индекс на указанное количество полуоткрытых <strong>Bins</strong>.</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">#In
a = pd.Index([3,3,4,2,1,3, 1, 2, 3, 4, np.nan,4,6,7])
a.value_counts(bins=4)

#Out
(2.5, 4.0]      7
(0.993, 2.5]    4
(5.5, 7.0]      2
(4.0, 5.5]      0
dtype: int64</pre>
<p><span>Более подробную информацию о параметрах и других настройках см. в </span><a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.value_counts.html" class="cq ih ks kt ku kv" target="_blank" rel="noopener nofollow noreferrer"><span>документации Pandas</span></a><span>.</span></p>
<h2><strong><span style="color: #ff6600;">mask()</span> &#8212; функция Python Pandas</strong></h2>
<p>Метод mask() является применением условия if-then для каждого элемента Series или DataFrame. Если Condition равно True, тогда он использует значение из Other (значение по умолчанию &#8212; NaN), в противном случае будет сохранено исходное значение. Этот метод mask() очень похож на where().</p>
<p><a href="https://python.ivan-shamaev.ru/wp-content/uploads/2020/04/3_5_Elegant_Python_Pandas_Functions-1.png"><img decoding="async" src="https://python.ivan-shamaev.ru/wp-content/uploads/2020/04/3_5_Elegant_Python_Pandas_Functions-1.png" alt="" width="676" height="639" class="aligncenter size-full wp-image-980" srcset="https://python.ivan-shamaev.ru/wp-content/uploads/2020/04/3_5_Elegant_Python_Pandas_Functions-1.png 676w, https://python.ivan-shamaev.ru/wp-content/uploads/2020/04/3_5_Elegant_Python_Pandas_Functions-1-300x284.png 300w" sizes="(max-width: 676px) 100vw, 676px" /></a></p>
<p><span>Ниже приведен DataFrame, в котором мы хотим изменить знак всех элементов, которые делятся на два без остатка.</span></p>
<p><a href="https://python.ivan-shamaev.ru/wp-content/uploads/2020/04/4_5_Elegant_Python_Pandas_Functions-1.png"><img decoding="async" src="https://python.ivan-shamaev.ru/wp-content/uploads/2020/04/4_5_Elegant_Python_Pandas_Functions-1.png" alt="" width="635" height="266" class="aligncenter size-full wp-image-982" srcset="https://python.ivan-shamaev.ru/wp-content/uploads/2020/04/4_5_Elegant_Python_Pandas_Functions-1.png 635w, https://python.ivan-shamaev.ru/wp-content/uploads/2020/04/4_5_Elegant_Python_Pandas_Functions-1-300x126.png 300w" sizes="(max-width: 635px) 100vw, 635px" /></a></p>
<p>Этого легко можно достигнуть с помощью функции mask():</p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">df = pd.DataFrame(np.arange(15).reshape(-1, 3), columns=['A', 'B','C'])
print(df)

#Out
    A   B   C
0   0   1   2
1   3   4   5
2   6   7   8
3   9  10  11
4  12  13  14

#mask operation to check if element is divided by 2 without any remainder. If match change the sign of the element as original
df.mask(df % 2 == 0,-df)

#Out
A   B   C
0   0   1  -2
1   3  -4   5
2  -6   7  -8
3   9 -10  11
4 -12  13 -14</pre>
<p><span>Более подробную информацию о параметрах и других настройках см. в </span><a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.mask.html#pandas.DataFrame.mask" class="cq ih ks kt ku kv" target="_blank" rel="noopener nofollow noreferrer"><span>документации Pandas mask</span></a><span>.</span></p>
<h2><strong><span style="color: #ff6600;">nlargest()</span> &#8212; функция Python Pandas</strong></h2>
<p>Во многих случаях мы сталкиваемся с ситуациями, когда нам нужно найти 3 верхних (top) или 5 нижних (bottom) значений для Series или DataFrame (например, трех лучших учеников с самыми высокими показателями с их совокупным баллом или трех худших кандидатов с общим количеством голосов, полученных на выборах).<br />
Функции Python Pandas nlargest() и nsmallest() &#8212; лучший способ для такой обработки данных.<br />
В приведенном ниже примере показаны три самых больших значения из DataFrame из 10 наблюдений.</p>
<p><a href="https://python.ivan-shamaev.ru/wp-content/uploads/2020/04/5_5_Elegant_Python_Pandas_Functions-1.png"><img decoding="async" src="https://python.ivan-shamaev.ru/wp-content/uploads/2020/04/5_5_Elegant_Python_Pandas_Functions-1.png" alt="" width="441" height="1040" class="aligncenter size-full wp-image-984" srcset="https://python.ivan-shamaev.ru/wp-content/uploads/2020/04/5_5_Elegant_Python_Pandas_Functions-1.png 441w, https://python.ivan-shamaev.ru/wp-content/uploads/2020/04/5_5_Elegant_Python_Pandas_Functions-1-127x300.png 127w, https://python.ivan-shamaev.ru/wp-content/uploads/2020/04/5_5_Elegant_Python_Pandas_Functions-1-434x1024.png 434w" sizes="(max-width: 441px) 100vw, 441px" /></a></p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">import pandas as pd
import numpy as np
df = pd.DataFrame({'HEIGHT': [170,78,99,160,160,130,155,70,70,20],
                   'WEIGHT': [50,60,70,80,90,90,90,50,60,70]},
                   index=['A','B','C','D','E','F','G','H','I','J'])
print(df)

HEIGHT  WEIGHT
A     170      50
B      78      60
C      99      70
D     160      80
E     160      90
F     130      90
G     155      90
H      70      50
I      70      60
J      20      70

dfl = df.nlargest(3,'HEIGHT')
print(dfl)

HEIGHT  WEIGHT
A     170      50
D     160      80
E     160      90</pre>
<p>Если есть связь, то есть несколько вариантов, которые можно разрешить с помощью «first», «last», «all» (по умолчанию «first»). Сохраняйте все случаи. Мы попытаемся найти две самые большие высоты в примерах ниже.</p>
<p><a href="https://python.ivan-shamaev.ru/wp-content/uploads/2020/04/6_5_Elegant_Python_Pandas_Functions-1.png"><img decoding="async" src="https://python.ivan-shamaev.ru/wp-content/uploads/2020/04/6_5_Elegant_Python_Pandas_Functions-1.png" alt="" width="883" height="821" class="aligncenter size-full wp-image-986" srcset="https://python.ivan-shamaev.ru/wp-content/uploads/2020/04/6_5_Elegant_Python_Pandas_Functions-1.png 883w, https://python.ivan-shamaev.ru/wp-content/uploads/2020/04/6_5_Elegant_Python_Pandas_Functions-1-300x279.png 300w, https://python.ivan-shamaev.ru/wp-content/uploads/2020/04/6_5_Elegant_Python_Pandas_Functions-1-768x714.png 768w" sizes="(max-width: 883px) 100vw, 883px" /></a></p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">dfl = df.nlargest(2,'HEIGHT',keep='all')
print(dfl)

HEIGHT  WEIGHT
A     170      50
D     160      80
E     160      90</pre>
<p>Сохраните последнее вхождение.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">dfl = df.nlargest(2,'HEIGHT',keep='last')
print(dfl)

HEIGHT  WEIGHT
A     170      50
E     160      90</pre>
<p><span>Сохраните первое вхождение.</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">dfl = df.nlargest(2,'HEIGHT',keep='first')
print(dfl)

HEIGHT  WEIGHT
A     170      50
D     160      80</pre>
<p><span>Более подробную информацию о параметрах и других настройках см. в </span><a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.nlargest.html" class="cq ih ks kt ku kv" target="_blank" rel="noopener nofollow noreferrer"><span>документации Pandas nlargest()</span></a><span>.</span></p>
<h2><strong><span style="color: #ff6600;">nsmallest()</span> &#8212; функция Python Pandas</strong></h2>
<p>nsmallest() также работает аналогичным образом, но с учетом самого маленького фильтра. Обратитесь к примеру ниже, в котором осуществляется поиск двух наименьших веса.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">import pandas as pd
import numpy as np
df = pd.DataFrame({'HEIGHT': [170,78,99,160,160,130,155,70,70,20],
                   'WEIGHT': [50,60,70,80,90,90,90,50,60,70]},
                   index=['A','B','C','D','E','F','G','H','I','J'])
print(df)

HEIGHT  WEIGHT
A     170      50
B      78      60
C      99      70
D     160      80
E     160      90
F     130      90
G     155      90
H      70      50
I      70      60
J      20      70

dfs = df.nsmallest(3,'WEIGHT')
print(dfs)

HEIGHT  WEIGHT
A     170      50
H      70      50
B      78      60</pre>
<p><span>Более подробную информацию о параметрах и других настройках см. в </span><a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.nsmallest.html#pandas.Series.nsmallest" class="cq ih ks kt ku kv" target="_blank" rel="noopener nofollow noreferrer"><span>документации Pandas nsmallest</span></a><span>.</span></p>
<p><a class="a2a_button_telegram" href="https://www.addtoany.com/add_to/telegram?linkurl=https%3A%2F%2Fpython.ivan-shamaev.ru%2F5-useful-functions-of-pandas-python-for-data-science%2F&amp;linkname=5%20%D0%9F%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D1%8B%D1%85%20%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B9%20Python%20Pandas%20%D0%B4%D0%BB%D1%8F%20Data%20Science" title="Telegram" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_whatsapp" href="https://www.addtoany.com/add_to/whatsapp?linkurl=https%3A%2F%2Fpython.ivan-shamaev.ru%2F5-useful-functions-of-pandas-python-for-data-science%2F&amp;linkname=5%20%D0%9F%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D1%8B%D1%85%20%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B9%20Python%20Pandas%20%D0%B4%D0%BB%D1%8F%20Data%20Science" title="WhatsApp" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=https%3A%2F%2Fpython.ivan-shamaev.ru%2F5-useful-functions-of-pandas-python-for-data-science%2F&amp;linkname=5%20%D0%9F%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D1%8B%D1%85%20%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B9%20Python%20Pandas%20%D0%B4%D0%BB%D1%8F%20Data%20Science" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_linkedin" href="https://www.addtoany.com/add_to/linkedin?linkurl=https%3A%2F%2Fpython.ivan-shamaev.ru%2F5-useful-functions-of-pandas-python-for-data-science%2F&amp;linkname=5%20%D0%9F%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D1%8B%D1%85%20%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B9%20Python%20Pandas%20%D0%B4%D0%BB%D1%8F%20Data%20Science" title="LinkedIn" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_vk" href="https://www.addtoany.com/add_to/vk?linkurl=https%3A%2F%2Fpython.ivan-shamaev.ru%2F5-useful-functions-of-pandas-python-for-data-science%2F&amp;linkname=5%20%D0%9F%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D1%8B%D1%85%20%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B9%20Python%20Pandas%20%D0%B4%D0%BB%D1%8F%20Data%20Science" title="VK" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_twitter" href="https://www.addtoany.com/add_to/twitter?linkurl=https%3A%2F%2Fpython.ivan-shamaev.ru%2F5-useful-functions-of-pandas-python-for-data-science%2F&amp;linkname=5%20%D0%9F%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D1%8B%D1%85%20%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B9%20Python%20Pandas%20%D0%B4%D0%BB%D1%8F%20Data%20Science" title="Twitter" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_email" href="https://www.addtoany.com/add_to/email?linkurl=https%3A%2F%2Fpython.ivan-shamaev.ru%2F5-useful-functions-of-pandas-python-for-data-science%2F&amp;linkname=5%20%D0%9F%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D1%8B%D1%85%20%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B9%20Python%20Pandas%20%D0%B4%D0%BB%D1%8F%20Data%20Science" title="Email" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fpython.ivan-shamaev.ru%2F5-useful-functions-of-pandas-python-for-data-science%2F&#038;title=5%20%D0%9F%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D1%8B%D1%85%20%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B9%20Python%20Pandas%20%D0%B4%D0%BB%D1%8F%20Data%20Science" data-a2a-url="https://python.ivan-shamaev.ru/5-useful-functions-of-pandas-python-for-data-science/" data-a2a-title="5 Полезных функций Python Pandas для Data Science"></a></p><p>Сообщение <a href="https://python.ivan-shamaev.ru/5-useful-functions-of-pandas-python-for-data-science/">5 Полезных функций Python Pandas для Data Science</a> появились сначала на <a href="https://python.ivan-shamaev.ru">Python 3 | Data Science | Нейронные сети | AI - Искусственный Интеллект</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://python.ivan-shamaev.ru/5-useful-functions-of-pandas-python-for-data-science/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Python 3 Pandas: Объекты Series и DataFrame. Построение Index</title>
		<link>https://python.ivan-shamaev.ru/pandas-series-and-dataframe-objects-build-index/</link>
					<comments>https://python.ivan-shamaev.ru/pandas-series-and-dataframe-objects-build-index/#comments</comments>
		
		<dc:creator><![CDATA[Шамаев Иван]]></dc:creator>
		<pubDate>Tue, 23 Apr 2019 02:32:09 +0000</pubDate>
				<category><![CDATA[Pandas. Обработка данных]]></category>
		<category><![CDATA[pandas dataframe]]></category>
		<category><![CDATA[pandas dataframe tutorial]]></category>
		<category><![CDATA[python 3]]></category>
		<category><![CDATA[python 3 pandas]]></category>
		<category><![CDATA[python pandas]]></category>
		<category><![CDATA[обработка dataframe]]></category>
		<category><![CDATA[обучение dataframe]]></category>
		<category><![CDATA[обучение Python pandas]]></category>
		<category><![CDATA[учебник python pandas]]></category>
		<guid isPermaLink="false">https://python.ivan-shamaev.ru/?p=79</guid>

					<description><![CDATA[<p>Что такое Pandas DataFrame? Pandas — более новый пакет, надстройка над библиотекой NumPy, обеспечивающий эффективную реализацию класса DataFrame. Объекты DataFrame — многомерные массивы с метками для строк и столбцов, а также зачастую с неоднородным типом данных и/или пропущенными данными. Помимо удобного интерфейса для хранения маркированных данных, библиотека Pandas реализует множество операций для работы с данными [&#8230;]</p>
<p>Сообщение <a href="https://python.ivan-shamaev.ru/pandas-series-and-dataframe-objects-build-index/">Python 3 Pandas: Объекты Series и DataFrame. Построение Index</a> появились сначала на <a href="https://python.ivan-shamaev.ru">Python 3 | Data Science | Нейронные сети | AI - Искусственный Интеллект</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><a class="a2a_button_telegram" href="https://www.addtoany.com/add_to/telegram?linkurl=https%3A%2F%2Fpython.ivan-shamaev.ru%2Fpandas-series-and-dataframe-objects-build-index%2F&amp;linkname=Python%203%20Pandas%3A%20%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D1%8B%20Series%20%D0%B8%20DataFrame.%20%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5%20Index" title="Telegram" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_whatsapp" href="https://www.addtoany.com/add_to/whatsapp?linkurl=https%3A%2F%2Fpython.ivan-shamaev.ru%2Fpandas-series-and-dataframe-objects-build-index%2F&amp;linkname=Python%203%20Pandas%3A%20%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D1%8B%20Series%20%D0%B8%20DataFrame.%20%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5%20Index" title="WhatsApp" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=https%3A%2F%2Fpython.ivan-shamaev.ru%2Fpandas-series-and-dataframe-objects-build-index%2F&amp;linkname=Python%203%20Pandas%3A%20%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D1%8B%20Series%20%D0%B8%20DataFrame.%20%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5%20Index" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_linkedin" href="https://www.addtoany.com/add_to/linkedin?linkurl=https%3A%2F%2Fpython.ivan-shamaev.ru%2Fpandas-series-and-dataframe-objects-build-index%2F&amp;linkname=Python%203%20Pandas%3A%20%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D1%8B%20Series%20%D0%B8%20DataFrame.%20%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5%20Index" title="LinkedIn" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_vk" href="https://www.addtoany.com/add_to/vk?linkurl=https%3A%2F%2Fpython.ivan-shamaev.ru%2Fpandas-series-and-dataframe-objects-build-index%2F&amp;linkname=Python%203%20Pandas%3A%20%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D1%8B%20Series%20%D0%B8%20DataFrame.%20%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5%20Index" title="VK" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_twitter" href="https://www.addtoany.com/add_to/twitter?linkurl=https%3A%2F%2Fpython.ivan-shamaev.ru%2Fpandas-series-and-dataframe-objects-build-index%2F&amp;linkname=Python%203%20Pandas%3A%20%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D1%8B%20Series%20%D0%B8%20DataFrame.%20%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5%20Index" title="Twitter" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_email" href="https://www.addtoany.com/add_to/email?linkurl=https%3A%2F%2Fpython.ivan-shamaev.ru%2Fpandas-series-and-dataframe-objects-build-index%2F&amp;linkname=Python%203%20Pandas%3A%20%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D1%8B%20Series%20%D0%B8%20DataFrame.%20%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5%20Index" title="Email" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fpython.ivan-shamaev.ru%2Fpandas-series-and-dataframe-objects-build-index%2F&#038;title=Python%203%20Pandas%3A%20%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D1%8B%20Series%20%D0%B8%20DataFrame.%20%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5%20Index" data-a2a-url="https://python.ivan-shamaev.ru/pandas-series-and-dataframe-objects-build-index/" data-a2a-title="Python 3 Pandas: Объекты Series и DataFrame. Построение Index"></a></p>
<h2 class="wp-block-heading">Что такое Pandas DataFrame?</h2>


<p><span><strong>Pandas</strong> — более новый пакет, надстройка над библиотекой NumPy, обеспечивающий эффективную реализацию класса DataFrame. </span></p>
<p><span><strong>Объекты DataFrame</strong> — многомерные массивы с метками для строк и столбцов, а также зачастую с неоднородным типом данных и/или пропущенными данными. </span></p>
<p><span>Помимо удобного интерфейса для <strong>хранения маркированных данных</strong>, библиотека <strong>Pandas</strong> реализует <strong>множество операций для работы с данными</strong> хорошо знакомых пользователям фреймворков баз данных и электронных таблиц.</span></p>


<h2 class="wp-block-heading">Импорт библиотек NumPy и Pandas</h2>



<p>На самом примитивном уровне объекты библиотеки Pandas можно считать расширенной версией структурированных массивов библиотеки NumPy, в которых строки и столбцы идентифицируются метками, а не простыми числовыми индексами. Библиотека Pandas предоставляет множество полезных утилит, методов и функциональности в дополнение к базовым структурам данных, но все последующее изложение потребует понимания этих базовых структур. Позвольте познакомить вас с тремя фундаментальными структурами данных библиотеки Pandas: классами Series, DataFrame и Index.</p>



<p>Начнем наш сеанс программирования с обычных импортов библиотек NumPy и Pandas:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import numpy as np
import pandas as pd</pre>



<h2 class="wp-block-heading">Объект Series библиотеки Pandas</h2>



<p><strong>Объект Series</strong> библиотеки Pandas — одномерный массив индексированных данных. Его можно создать из списка или массива следующим образом:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import numpy as np
import pandas as pd

data = pd.Series([0.25, 0.5, 0.75, 1.0])
print(data)</pre>



<p><strong>Результат:</strong></p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" width="130" height="85" src="https://python.ivan-shamaev.ru/wp-content/uploads/2019/04/pandas_series_ex1.jpg" alt="" class="wp-image-82"/></figure></div>



<p>Как мы видели из предыдущего результата, объект Series служит адаптером как для последовательности значений, так и последовательности индексов, к которым можно получить доступ посредством атрибутов values и index. Атрибут values представляет собой массив NumPy:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import numpy as np
import pandas as pd

data = pd.Series([0.25, 0.5, 0.75, 1.0])
print(data.values)</pre>



<p><strong>Результат:</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">[0.25 0.5  0.75 1.  ]</pre>



<p><strong>Index</strong> — массивоподобный объект типа <strong>pd.Index</strong>:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import numpy as np
import pandas as pd

data = pd.Series([0.25, 0.5, 0.75, 1.0])
print(data.index)</pre>



<p><strong>Результат:</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">RangeIndex(start=0, stop=4, step=1)</pre>



<p>Аналогично массивам библиотеки NumPy, к данным можно обращаться по соответствующему им индексу посредством нотации с использованием квадратных скобок языка Python:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import numpy as np
import pandas as pd

data = pd.Series([0.25, 0.5, 0.75, 1.0])
print('data[1]:')
print(data[1])

print('data[1:3]:')
print(data[1:3])</pre>



<p><strong>Результат:</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">data[1]:
0.5
data[1:3]:
1    0.50
2    0.75
dtype: float64</pre>



<p>Однако объект Series библиотеки Pandas намного универсальнее и гибче, чем эмулируемый им одномерный массив библиотеки NumPy.</p>



<h3 class="wp-block-heading">Объект Series как обобщенный массив NumPy</h3>



<p>Может показаться, что объект <strong>Series </strong>и <strong>одномерный массив библиотеки NumPy</strong> взаимозаменяемы. Основное различие между ними — <strong>индекс</strong>. В то время как <strong>индекс массива NumPy</strong>, используемый для доступа к значениям, — целочисленный и описывается неявно, <strong>индекс объекта Series библиотеки Pandas</strong> описывается явно и связывается со значениями.<br></p>



<p><strong>Явное описание индекса</strong> расширяет возможности объекта Series. Такой индекс не должен быть целым числом, а может состоять из значений любого нужного типа. Например, при желании мы можем использовать в качестве индекса строковые значения:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import numpy as np
import pandas as pd

data = pd.Series([0.25, 0.5, 0.75, 1.0],
                 index=['a', 'b', 'c', 'd'])
print(data)</pre>



<p><strong>Результат:</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">a    0.25
b    0.50
c    0.75
d    1.00
dtype: float64</pre>



<p>При этом доступ к элементам работает обычным образом:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import numpy as np
import pandas as pd

data = pd.Series([0.25, 0.5, 0.75, 1.0],
                 index=['a', 'b', 'c', 'd'])
print(data['b'])</pre>



<p><strong>Результат:</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">0.5</pre>



<h3 class="wp-block-heading">Объект Series как специализированный словарь</h3>



<p><strong>Объект Series</strong> библиотеки Pandas можно рассматривать как специализированную разновидность словаря языка Python. <strong>Словарь </strong>— структура, задающая соответствие произвольных ключей набору произвольных значений, а объект <strong>Series </strong>— структура, задающая соответствие типизированных ключей набору типизированных значений. </p>



<p><strong>Типизация важна:</strong> точно так же, как соответствующий типу специализированный код для массива библиотеки NumPy при выполнении определенных операций делает его эффективнее, чем стандартный список Python, информация о типе в объекте Series библиотеки Pandas делает его намного более эффективным для определенных операций, чем словари Python.<br></p>



<p>Можно сделать аналогию «объект Series — словарь» еще более наглядной, сконструировав объект Series непосредственно из словаря Python.</p>



<p>По умолчанию при этом будет создан объект Series с полученным из отсортированных ключей индексом. Следовательно, для него возможен обычный доступ к элементам, такой же, как для словаря. Объект Series поддерживает операции &#171;срезы&#187;.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import numpy as np
import pandas as pd

# Словарь
population_dict = {'California': 38332521,
                   'Texas': 26448193,
                   'New York': 19651127,
                   'Florida': 19552860,
                   'Illinois': 12882135}
population = pd.Series(population_dict)
print('population:')
print(population)

# Доступ к элементам
print("population['California']:")
print(population['California'])

# Срез
print("population['California':'New York']:")
print(population['California':'New York'])</pre>



<p><strong>Результат:</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">population:
California    38332521
Texas         26448193
New York      19651127
Florida       19552860
Illinois      12882135
dtype: int64

population['California']:
38332521

population['California':'New York']:
California    38332521
Texas         26448193
New York      19651127
dtype: int64</pre>



<h3 class="wp-block-heading">Создание объектов Series</h3>



<p>Мы уже изучили несколько способов создания объектов Series библиотеки Pandas с нуля.</p>



<p>Все они представляют собой различные варианты следующего <strong>синтаксиса Pandas Series</strong> (общий вид синтаксиса):</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">pd.Series(data, index=index)</pre>



<p>где <strong>index </strong>— необязательный аргумент, а <strong>data </strong>может быть одной из множества сущностей.</p>



<p>Например, аргумент data может быть списком или массивом NumPy. В этом случае index по умолчанию будет целочисленной последовательностью:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import pandas as pd

data = pd.Series([2, 4, 6])
print(data)</pre>



<p><strong>Результат:</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">0    2
1    4
2    6
dtype: int64</pre>



<p>Аргумент data может быть скалярным значением, которое будет повторено нужное количество раз для заполнения заданного индекса:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import pandas as pd

data = pd.Series(5, index=[100, 200, 300])
print(data)</pre>



<p><strong>Результат:</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">100    5
200    5
300    5
dtype: int64</pre>



<p>Аргумент data может быть словарем, в котором index по умолчанию является отсортированными ключами этого словаря:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import pandas as pd

data = pd.Series({2:'a', 1:'b', 3:'c'})
print(data)</pre>



<p><strong>Результат:</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">2    a
1    b
3    c
dtype: object</pre>



<p>В каждом случае индекс можно указать вручную, если необходимо получить другой результат:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import pandas as pd

data = pd.Series({2:'a', 1:'b', 3:'c'}, index=[3, 2])
print(data)</pre>



<p><strong>Результат:</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">3    c
2    a
dtype: object</pre>



<p>Обратите внимание, что объект Series заполняется только заданными явным образом ключами.</p>



<h2 class="wp-block-heading">Объект DataFrame библиотеки Pandas</h2>



<p>Следующая базовая структура библиотеки Pandas — <strong>объект DataFrame</strong>. Как и объект Series, объект DataFrame можно рассматривать или как обобщение массива NumPy, или как специализированную версию словаря Python. Изучим оба варианта.</p>



<h3 class="wp-block-heading">DataFrame как обобщенный массив NumPy</h3>



<p>Если объект <strong>Series </strong>— аналог одномерного массива с гибкими индексами, объект <strong>DataFrame </strong>— аналог двумерного массива с гибкими индексами строк и гибкими именами столбцов. Аналогично тому, что двумерный массив можно рассматривать как упорядоченную последовательность выровненных столбцов, объект DataFrame можно рассматривать как упорядоченную последовательность выровненных объектов Series. <strong>Под «выровненными» имеется в виду то, что они используют один и тот же индекс.</strong></p>



<p>Чтобы продемонстрировать это, сначала создадим новый объект Series, содержащий площадь каждого из пяти упомянутых в предыдущем разделе штатов:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import pandas as pd

area_dict = {'California': 423967,
             'Texas': 695662,
             'New York': 141297,
             'Florida': 170312,
             'Illinois': 149995}
area = pd.Series(area_dict)
print(area)</pre>



<p><strong>Результат:</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">California    423967
Texas         695662
New York      141297
Florida       170312
Illinois      149995
dtype: int64</pre>



<p>Воспользовавшись объектом population класса <strong>Series</strong>, сконструируем на основе словаря единый двумерный объект, содержащий всю эту информацию:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import pandas as pd

# Словарь площадь штатов
area_dict = {'California': 423967,
             'Texas': 695662,
             'New York': 141297,
             'Florida': 170312,
             'Illinois': 149995}
area = pd.Series(area_dict)

# Словарь население
population_dict = {'California': 38332521,
                   'Texas': 26448193,
                   'New York': 19651127,
                   'Florida': 19552860,
                   'Illinois': 12882135}
population = pd.Series(population_dict)

# Создаем DataFrame
states = pd.DataFrame({'population': population, 'area': area})
print(states)</pre>



<p><strong>Результат:</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">            population    area
California    38332521  423967
Texas         26448193  695662
New York      19651127  141297
Florida       19552860  170312
Illinois      12882135  149995</pre>



<p>Аналогично объекту Series у объекта DataFrame имеется атрибут <strong>index</strong>, обеспечивающий доступ к меткам индекса. Еще у объекта DataFrame есть атрибут <strong>columns</strong>, представляющий собой содержащий метки столбцов объект Index.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import pandas as pd

# Словарь площадь штатов
area_dict = {'California': 423967,
             'Texas': 695662,
             'New York': 141297,
             'Florida': 170312,
             'Illinois': 149995}
area = pd.Series(area_dict)

# Словарь население
population_dict = {'California': 38332521,
                   'Texas': 26448193,
                   'New York': 19651127,
                   'Florida': 19552860,
                   'Illinois': 12882135}
population = pd.Series(population_dict)

# Создаем DataFrame
states = pd.DataFrame({'population': population, 'area': area})

print('Индексы - states.index:')
print(states.index)
print('')
print('Колонки - states.columns:')
print(states.columns)</pre>



<p><strong>Результат:</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Индексы - states.index:
Index(['California', 'Texas', 'New York', 'Florida', 'Illinois'], dtype='object')

Колонки - states.columns:
Index(['population', 'area'], dtype='object')</pre>



<p>Таким образом, объект DataFrame можно рассматривать как обобщение двумерного массива NumPy, где как у строк, так и у столбцов есть обобщенные индексы для доступа к данным.</p>



<h3 class="wp-block-heading">Объект DataFrame как специализированный словарь</h3>



<p><strong>DataFrame </strong>можно рассматривать как специализированный словарь. Если словарь задает соответствие ключей значениям, то DataFrame задает соответствие имени столбца объекту <strong>Series </strong>с данными этого столбца. Например, запрос данных по атрибуту &#8216;area&#8217; приведет к тому, что будет возвращен объект Series, содержащий площади штатов:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import pandas as pd

# Словарь площадь штатов
area_dict = {'California': 423967,
             'Texas': 695662,
             'New York': 141297,
             'Florida': 170312,
             'Illinois': 149995}
area = pd.Series(area_dict)

# Словарь население
population_dict = {'California': 38332521,
                   'Texas': 26448193,
                   'New York': 19651127,
                   'Florida': 19552860,
                   'Illinois': 12882135}
population = pd.Series(population_dict)

# Создаем DataFrame
states = pd.DataFrame({'population': population, 'area': area})

print(states['area'])</pre>



<p><strong>Результат:</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">California    423967
Texas         695662
New York      141297
Florida       170312
Illinois      149995
Name: area, dtype: int64</pre>



<h3 class="wp-block-heading">Создание объектов DataFrame</h3>



<p>Существует множество способов создания объектов DataFrame библиотеки Pandas. Вот несколько примеров.</p>



<h4 class="wp-block-heading">Из одного объекта Series</h4>



<p><strong>Объект DataFrame</strong> — набор объектов Series. </p>



<p>DataFrame, состоящий из одного столбца, можно создать на основе одного объекта Series:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import pandas as pd

# Словарь население
population_dict = {'California': 38332521,
                   'Texas': 26448193,
                   'New York': 19651127,
                   'Florida': 19552860,
                   'Illinois': 12882135}
population = pd.Series(population_dict)

df = pd.DataFrame(population, columns=['population'])

print(df)</pre>



<p><strong>Результат:</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">            population
California    38332521
Texas         26448193
New York      19651127
Florida       19552860
Illinois      12882135</pre>



<h4 class="wp-block-heading">Из списка словарей</h4>



<p>Любой список словарей можно преобразовать в объект DataFrame. Мы воспользуемся простым списковым включением для создания данных:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import pandas as pd

data = [{'a': i, 'b': 2 * i}
        for i in range(3)]

print('data:')
print(data)
print('')

df = pd.DataFrame(data)
print('df:')
print(df)</pre>



<p><strong>Результат:</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">data:
[{'a': 0, 'b': 0}, {'a': 1, 'b': 2}, {'a': 2, 'b': 4}]

df:
   a  b
0  0  0
1  1  2
2  2  4</pre>



<p>Даже если некоторые ключи в словаре отсутствуют, библиотека Pandas просто заполнит их значениями NaN (то есть Not a number — «не является числом»):</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import pandas as pd

df = pd.DataFrame([{'a': 1, 'b': 2}, {'b': 3, 'c': 4}])
print('df:')
print(df)</pre>



<p><strong>Результат:</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">df:
     a  b    c
0  1.0  2  NaN
1  NaN  3  4.0</pre>



<h4 class="wp-block-heading">Из словаря объектов Series</h4>



<p>Объект DataFrame также можно создать на основе словаря объектов Series (этот пример был приведен ранее):</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import pandas as pd

# Словарь площадь штатов
area_dict = {'California': 423967,
             'Texas': 695662,
             'New York': 141297,
             'Florida': 170312,
             'Illinois': 149995}
area = pd.Series(area_dict)

# Словарь население
population_dict = {'California': 38332521,
                   'Texas': 26448193,
                   'New York': 19651127,
                   'Florida': 19552860,
                   'Illinois': 12882135}
population = pd.Series(population_dict)

# Создаем DataFrame
df = pd.DataFrame({'population': population,
                   'area': area})

print(df)</pre>



<p><strong>Результат:</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">            population    area
California    38332521  423967
Texas         26448193  695662
New York      19651127  141297
Florida       19552860  170312
Illinois      12882135  149995 </pre>



<h4 class="wp-block-heading">Из двумерного массива NumPy</h4>



<p>Если у нас есть двумерный массив данных, мы можем создать объект DataFrame с любыми заданными именами столбцов и индексов. Для каждого из пропущенных значений будет использоваться целочисленный индекс:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import numpy as np
import pandas as pd

df = pd.DataFrame(np.random.rand(3, 2),
                  columns=['foo', 'bar'],
                  index=['a', 'b', 'c'])
print(df)</pre>



<p><strong>Результат:</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">        foo       bar
a  0.290872  0.647270
b  0.690850  0.950563
c  0.468706  0.344193</pre>



<h4 class="wp-block-heading">Из структурированного массива NumPy</h4>



<p>Объект DataFrame библиотеки Pandas ведет себя во многом аналогично структурированному массиву библиотеки NumPy и может быть создан непосредственно из него:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import numpy as np
import pandas as pd

A = np.zeros(3, dtype=[('A', 'i8'), ('B', 'f8')])
print('A:')
print(A)
print('')

df = pd.DataFrame(A)
print('df:')
print(df)</pre>



<p><strong>Результат:</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">A:
[(0, 0.) (0, 0.) (0, 0.)]

df:
   A    B
0  0  0.0
1  0  0.0
2  0  0.0</pre>



<h2 class="wp-block-heading">Объект Index библиотеки Pandas</h2>



<p>Как объект <strong>Series</strong>, так и объект <strong>DataFrame </strong>содержат явный <strong>индекс</strong>, обеспечивающий возможность ссылаться на данные и модифицировать их.</p>



<p><strong>Объект Index</strong> можно рассматривать или как неизменяемый массив (immutable array), или как упорядоченное множество (ordered set) (формально мультимножество, так как объекты Index могут содержать повторяющиеся значения). Из этих способов его представления следуют некоторые интересные возможности операций над объектами Index. В качестве простого примера создадим Index из списка целых чисел:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import pandas as pd

ind = pd.Index([2, 3, 5, 7, 11])
print(ind)</pre>



<p><strong>Результат:</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Int64Index([2, 3, 5, 7, 11], dtype='int64')</pre>



<h3 class="wp-block-heading">Объект Index как неизменяемый массив</h3>



<p><strong>Объект Index</strong> во многом ведет себя аналогично массиву. Например, для извлечения из него значений или срезов можно использовать стандартную нотацию индексации языка Python. У объектов Index есть много атрибутов.</p>



<p><strong>Результат:</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">ind[1]
3

ind[::2]
Int64Index([2, 5, 11], dtype='int64')

ind.size, ind.shape, ind.ndim, ind.dtype
5 (5,) 1 int64</pre>



<p>Одно из различий между объектами Index и массивами NumPy — <strong>неизменяемость индексов</strong>, то есть их нельзя модифицировать стандартными средствами:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import pandas as pd

ind = pd.Index([2, 3, 5, 7, 11])
ind[1] = 0</pre>



<p><strong>Результат:</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Traceback (most recent call last):
  File "C:/Users/User/Desktop/test.py", line 4, in &lt;module>
    ind[1] = 0
  File "C:\Users\User\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pandas\core\indexes\base.py", line 3938, in __setitem__
    raise TypeError("Index does not support mutable operations")
TypeError: Index does not support mutable operations</pre>



<p>Неизменяемость делает безопаснее совместное использование индексов несколькими объектами DataFrame и массивами, исключая возможность побочных эффектов в виде случайной модификации индекса по неосторожности.</p>


<h1 class="ff b fg fn cn"><strong>Выбор подмножеств данных в Pandas</strong></h1>
<h2>Анатомия Python Pandas DataFrame &#8212; Column, Index, Data</h2>
<p>Рассмотрим изображение контейнера данных DataFrame (библиотеки Pandas):</p>
<p><img decoding="async" src="https://python.ivan-shamaev.ru/wp-content/uploads/2019/04/python_pandas_dataframe_structure_anatomy.png" alt="" width="1258" height="412" class="alignnone wp-image-245 size-full" srcset="https://python.ivan-shamaev.ru/wp-content/uploads/2019/04/python_pandas_dataframe_structure_anatomy.png 1258w, https://python.ivan-shamaev.ru/wp-content/uploads/2019/04/python_pandas_dataframe_structure_anatomy-300x98.png 300w, https://python.ivan-shamaev.ru/wp-content/uploads/2019/04/python_pandas_dataframe_structure_anatomy-768x252.png 768w, https://python.ivan-shamaev.ru/wp-content/uploads/2019/04/python_pandas_dataframe_structure_anatomy-1024x335.png 1024w" sizes="(max-width: 1258px) 100vw, 1258px" /></p>
<p><strong>Три компонента DataFrame:</strong></p>
<p><strong>DataFrame</strong> состоит из трех различных компонентов: <strong>индекса , столбцов и данных.</strong> Данные также известны как значения.</p>
<p><strong>Индекс</strong> &#8212; это последовательность значений в левой части DataFrame. Каждое отдельное значение индекса называется index label, Иногда индекс упоминается как заголовки строк. В приведенном выше примере метки строк не очень интересны и представляют собой целые числа, начиная с 0 до n-1, где n &#8212; количество строк в таблице.<br /><strong></strong></p>
<p><strong>Столбцы</strong> представляют собой последовательность значений в самой верхней части DataFrame.</p>
<p>Все остальное является <strong>данными или значениями</strong>. Иногда вы будете слышать, как датафреймы называют<strong> табличными данными</strong>. Это просто еще одно имя для данных прямоугольной таблицы со строками и столбцами.</p>
<p><strong>Каждая строка имеет метку, каждая колонка имеет метку</strong></p>
<p>Основной вывод из <strong>анатомии DataFrame</strong> заключается в том, что каждая строка имеет метку, каждый столбец имеет метку. Эти <strong>метки используются для ссылки на конкретные строки или столбцы</strong> в DataFrame.</p>
<h2 id="2636" class="gi gj cn ar aq gk gl gm gn go gp gq gr gs gt gu gv"><span>Что такое выбор подмножества?</span></h2>
<p id="1500" class="hb hc cn ar hd b he hf hg hh hi hj hk hl hm hn ho" data-selectable-paragraph=""><span>Прежде чем мы начнем делать выбор подмножества, было бы хорошо определить, что это такое. <strong>Выбор подмножества</strong> &#8212; это просто выбор определенных строк и столбцов данных из <strong>DataFrame</strong> (или Series). Это может означать выбор всех строк и некоторых столбцов, некоторых строк и всех столбцов или некоторых строк и столбцов.</span></p>
<h2 id="c635" class="gi gj cn ar aq gk gl gm gn go gp gq gr gs gt gu gv"><span>Выбор при помощи []</span></h2>
<h3>Загружаем данные из CSV в Pandas DataFrame (Python 3)</h3>
<p>В совокупности <strong>[], .loc и .iloc</strong> называются <strong>индексаторами</strong>. Это самые распространенные способы выбора данных.</p>
<p><strong>Скачать файл для использования в примерах:</strong></p>
<p><a href="https://python.ivan-shamaev.ru/wp-content/uploads/2019/04/SampleData_Pandas.csv"><em><strong>SampleData_Pandas.csv</strong></em></a></p>
<p><strong>Код загрузки данных из csv в Pandas DataFrame:</strong></p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">import pandas as pd
import numpy as np

df = pd.read_csv('D:\#python#\example\SampleData_Pandas.csv', sep=';', index_col=0)
print(df)</pre>
<p><strong>Результат:</strong></p>
<p><a href="https://python.ivan-shamaev.ru/wp-content/uploads/2019/04/dataframe_pandas_data_example.png"><img decoding="async" src="https://python.ivan-shamaev.ru/wp-content/uploads/2019/04/dataframe_pandas_data_example.png" alt="" width="681" height="418" class="aligncenter size-full wp-image-254" srcset="https://python.ivan-shamaev.ru/wp-content/uploads/2019/04/dataframe_pandas_data_example.png 681w, https://python.ivan-shamaev.ru/wp-content/uploads/2019/04/dataframe_pandas_data_example-300x184.png 300w" sizes="(max-width: 681px) 100vw, 681px" /></a></p>
<p><strong>Вариант 2 загрузки данных из CSV (Index генерируется самостоятельно)</strong></p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">import pandas as pd
import numpy as np

df = pd.read_csv('D:\#python#\example\SampleData_Pandas.csv', sep=';')
print(df)</pre>
<p><strong>Результат:</strong></p>
<p><a href="https://python.ivan-shamaev.ru/wp-content/uploads/2019/04/dataframe_pandas_data_example2.png"><img decoding="async" src="https://python.ivan-shamaev.ru/wp-content/uploads/2019/04/dataframe_pandas_data_example2.png" alt="" width="634" height="531" class="aligncenter size-full wp-image-256" srcset="https://python.ivan-shamaev.ru/wp-content/uploads/2019/04/dataframe_pandas_data_example2.png 634w, https://python.ivan-shamaev.ru/wp-content/uploads/2019/04/dataframe_pandas_data_example2-300x251.png 300w" sizes="(max-width: 634px) 100vw, 634px" /></a></p>
<h3 id="5c39" class="gi gj cn ar aq gk gl gm gn go gp gq gr gs gt gu gv"><span>Извлечение отдельных компонентов DataFrame</span></h3>
<p id="b25d" class="hb hc cn ar hd b he hf hg hh hi hj hk hl hm hn ho" data-selectable-paragraph=""><span>Ранее мы упоминали три компоненты DataFrame. <strong>Индекс, столбцы и данные (значения).</strong> Мы можем извлечь каждый из этих компонентов в свои переменные. Давайте сделаем это, а затем осмотрим их:</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">import pandas as pd
import numpy as np

df = pd.read_csv('D:\#python#\example\SampleData_Pandas.csv', sep=';')

index = df.index
columns = df.columns
values = df.values

index_list = df.index.tolist()
columns_list = df.columns.tolist()
values_list = df.values.tolist()

print('+++++ БЕЗ TOLIST() +++++')
print(index)
print('==========================')
print(columns)
print('==========================')
print(values)
print('==========================')


print('+++++ С TOLIST() +++++')
print(index_list)
print('==========================')
print(columns_list)
print('==========================')
print(values_list)</pre>
<p><strong>Результат:</strong></p>
<p><a href="https://python.ivan-shamaev.ru/wp-content/uploads/2019/04/view_dataframe_pandas_index_columns_values_tolist.png"><img decoding="async" src="https://python.ivan-shamaev.ru/wp-content/uploads/2019/04/view_dataframe_pandas_index_columns_values_tolist.png" alt="" width="925" height="504" class="aligncenter size-full wp-image-263" srcset="https://python.ivan-shamaev.ru/wp-content/uploads/2019/04/view_dataframe_pandas_index_columns_values_tolist.png 925w, https://python.ivan-shamaev.ru/wp-content/uploads/2019/04/view_dataframe_pandas_index_columns_values_tolist-300x163.png 300w, https://python.ivan-shamaev.ru/wp-content/uploads/2019/04/view_dataframe_pandas_index_columns_values_tolist-768x418.png 768w" sizes="(max-width: 925px) 100vw, 925px" /></a></p>
<h3 id="ddf0" class="gi gj cn ar aq gk gl gm gn go gp gq gr gs gt gu gv"><span>Типы данных компонентов</span></h3>
<p id="ec73" class="hb hc cn ar hd b he hf hg hh hi hj hk hl hm hn ho" data-selectable-paragraph=""><span>Давайте выведем тип каждого компонента, чтобы точно понять, что это за объект.</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">import pandas as pd
import numpy as np

df = pd.read_csv('D:\#python#\example\SampleData_Pandas.csv', sep=';')

index = df.index
columns = df.columns
values = df.values

index_list = df.index.tolist()
columns_list = df.columns.tolist()
values_list = df.values.tolist()

print('+++++ БЕЗ TOLIST() +++++')
print(type(index))
print('==========================')
print(type(columns))
print('==========================')
print(type(values))
print('==========================')


print('+++++ С TOLIST() +++++')
print(type(index_list))
print('==========================')
print(type(columns_list))
print('==========================')
print(type(values_list))</pre>
<p><strong>Результат:</strong></p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">+++++ БЕЗ TOLIST() +++++
&lt;class 'pandas.core.indexes.range.RangeIndex'&gt;
==========================
&lt;class 'pandas.core.indexes.base.Index'&gt;
==========================
&lt;class 'numpy.ndarray'&gt;
==========================

+++++ С TOLIST() +++++
&lt;class 'list'&gt;
==========================
&lt;class 'list'&gt;
==========================
&lt;class 'list'&gt;</pre>
<h4 id="2665" class="gi gj cn ar aq gk gl gm gn go gp gq gr gs gt gu gv"><span>Понимание этих типов</span></h4>
<p id="2f50" class="hb hc cn ar hd b he hf hg hh hi hj hk hl hm hn ho" data-selectable-paragraph=""><span>Интересно, что и индекс, и столбцы имеют одинаковый тип. Они оба </span><code class="gw gx gy gz ha b"></code><strong class="hd js">Index-</strong><span>объект Pandas. Этот объект сам по себе довольно мощный, но сейчас вы можете думать о нем как о последовательности меток для строк или столбцов.</span></p>
<p id="eaa7" class="hb hc cn ar hd b he hp hg hq hi hr hk hs hm ht ho" data-selectable-paragraph=""><span>Значения (ячейки таблицы) &#8212; это </span><strong class="hd js">numpy.ndarray</strong><span>, который обозначает n-мерный массив и является основным контейнером данных в библиотеке <strong>NumPy</strong>. </span></p>
<blockquote>
<p class="hb hc cn ar hd b he hp hg hq hi hr hk hs hm ht ho" data-selectable-paragraph=""><strong>Pandas построен непосредственно поверх NumPy, и именно этот массив отвечает за большую часть рабочей нагрузки.</strong></p>
</blockquote>
<h3 id="01b1" class="gi gj cn ar aq gk gl gm gn go gp gq gr gs gt gu gv"><span>Выбор одного столбца как серии</span></h3>
<p id="f598" class="hb hc cn ar hd b he hf hg hh hi hj hk hl hm hn ho" data-selectable-paragraph=""><span>Чтобы выбрать один столбец данных, просто поместите имя столбца в скобках. Давайте выберем столбец <strong>Подразделение</strong>:</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">import pandas as pd
import numpy as np

df = pd.read_csv('D:\#python#\example\SampleData_Pandas.csv', sep=';')

print(df['Подразделение'])</pre>
<p><strong>Результат:</strong></p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">0            Отдел продаж
1       Отдел продвижения
2       Отдел продвижения
3       Отдел продвижения
              ...        
2662         Отдел продаж
2663         Отдел продаж
2664         Отдел продаж
2665    Отдел продвижения
2666    Отдел продвижения
2667    Отдел продвижения
2668    Отдел продвижения
Name: Подразделение, Length: 2669, dtype: object</pre>
<h4 id="8f6b" class="gi gj cn ar aq gk gl gm gn go gp gq gr gs gt gu gv"><span>Анатомия Series, возвращаемой при выборе 1 столбца</span></h4>
<p id="347d" class="hb hc cn ar hd b he hf hg hh hi hj hk hl hm hn ho" data-selectable-paragraph=""><span>Выбор одного столбца данных возвращает другой контейнер данных <strong>Pandas Series</strong>. </span></p>
<p class="hb hc cn ar hd b he hf hg hh hi hj hk hl hm hn ho" data-selectable-paragraph=""><span><strong>Series</strong> &#8212; это одномерная последовательность помеченных данных. Существует два основных компонента Серии: </span><strong class="hd js"><span>указатель</span></strong><span> и </span><strong class="hd js"><span>данные</span></strong><span> (или </span><strong class="hd js"><span>значения</span></strong><span> . В серии нет колонок.</span></p>
<p id="20c7" class="hb hc cn ar hd b he hp hg hq hi hr hk hs hm ht ho" data-selectable-paragraph=""><span>Визуальное отображение Series &#8212; это просто текст, в отличие от красиво оформленной таблицы для DataFrames.</span></p>
<p id="cf25" class="hb hc cn ar hd b he hp hg hq hi hr hk hs hm ht ho" data-selectable-paragraph=""><span>Вы также заметите две дополнительные части данных в нижней части <strong>Series</strong>. </span></p>
<p class="hb hc cn ar hd b he hp hg hq hi hr hk hs hm ht ho" data-selectable-paragraph=""><span><strong>Name</strong> из <strong>Series</strong> становится старое имя колонки. Вы также увидите тип данных или <strong>dtype</strong></span><strong class="hd js"> </strong><span>серии. Вы можете игнорировать оба этих элемента на данный момент. А также количество элементов <strong>Length</strong>.</span></p>
<h3 id="f7c1" class="gi gj cn ar aq gk gl gm gn go gp gq gr gs gt gu gv"><span>Выбор нескольких столбцов с помощью оператора индексации</span></h3>
<p id="4f39" class="hb hc cn ar hd b he hf hg hh hi hj hk hl hm hn ho" data-selectable-paragraph=""><span>Можно выбрать несколько столбцов только с помощью оператора индексации, передав ему список имен столбцов. Давайте выберем <em><strong>&#8216;Подразделение&#8217;, &#8216;Менеджер&#8217;, &#8216;Номенклатура&#8217;, &#8216;Продажи&#8217;</strong></em></span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">import pandas as pd
import numpy as np

df = pd.read_csv('D:\#python#\example\SampleData_Pandas.csv', sep=';')

print(df[['Подразделение','Менеджер','Номенклатура','Продажи']])</pre>
<p><strong>Результат:</strong></p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">          Подразделение    Менеджер Номенклатура       Продажи
0          Отдел продаж      Петров         Лыжи   956898,3051
1     Отдел продвижения     Сидоров   Велосипеды   1841949,153
2     Отдел продвижения     Сидоров        Доски   1052542,373
3     Отдел продвижения     Сидоров      Палатки   74478,81356
4          Отдел продаж    Илинская   Велосипеды   1649745,763
5          Отдел продаж    Илинская        Доски   1263241,525
...                 ...         ...          ...           ...
2661       Отдел продаж      Петров       Прочее   423,7288136
2662       Отдел продаж    Илинская         Лыжи  -15254,23729
2663       Отдел продаж      Петров         Лыжи   8176271,186
2664       Отдел продаж      Петров       Прочее   171186,4407
2665  Отдел продвижения  Охлобыстин       Прочее   16949,15254
2666  Отдел продвижения    Розницов         Лыжи   15254,23729
2667  Отдел продвижения    Розницов       Одежда   1444915,254
2668  Отдел продвижения    Розницов       Прочее   3389,830508

[2669 rows x 4 columns]</pre>
<h4 id="f1af" class="gi gj cn ar aq gk gl gm gn go gp gq gr gs gt gu gv"><span>Выбор нескольких столбцов возвращает DataFrame</span></h4>
<p id="b2f8" class="hb hc cn ar hd b he hf hg hh hi hj hk hl hm hn ho" data-selectable-paragraph=""><span>Выбор нескольких столбцов возвращает DataFrame. На самом деле вы можете выбрать один столбец как DataFrame со списком из одного элемента:</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">import pandas as pd
import numpy as np

df = pd.read_csv('D:\#python#\example\SampleData_Pandas.csv', sep=';')

print(df[['Подразделение']])</pre>
<p><strong>Результат:</strong></p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">          Подразделение
0          Отдел продаж
1     Отдел продвижения
2     Отдел продвижения
...                 ...
2666  Отдел продвижения
2667  Отдел продвижения
2668  Отдел продвижения

[2669 rows x 1 columns]</pre>
<p><span>Хотя это напоминает <strong>Series</strong>, технически это <strong>DataFrame</strong>, другой объект.</span></p>
<h3 id="dfc4" class="gi gj cn ar aq gk gl gm gn go gp gq gr gs gt gu gv"><span>Порядок столбцов не имеет значения</span></h3>
<p id="7b89" class="hb hc cn ar hd b he hf hg hh hi hj hk hl hm hn ho" data-selectable-paragraph=""><span>При выборе нескольких столбцов вы можете выбрать их в любом порядке по вашему выбору. Это не должен быть тот же самый порядок как оригинальный DataFrame.</span></p>
<p data-selectable-paragraph=""><span>Например, давайте выберем <strong>Номенклатура, Подразделение</strong>:</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">import pandas as pd
import numpy as np

df = pd.read_csv('D:\#python#\example\SampleData_Pandas.csv', sep=';')

print(df[['Номенклатура','Подразделение']])</pre>
<p data-selectable-paragraph=""><strong>Результат:</strong></p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">     Номенклатура      Подразделение
0            Лыжи       Отдел продаж
1      Велосипеды  Отдел продвижения
2           Доски  Отдел продвижения
3         Палатки  Отдел продвижения
4      Велосипеды       Отдел продаж
...           ...                ...
2666         Лыжи  Отдел продвижения
2667       Одежда  Отдел продвижения
2668       Прочее  Отдел продвижения

[2669 rows x 2 columns]</pre>
<h3 id="205b" class="gi gj cn ar aq gk gl gm gn go gp gq gr gs gt gu gv"><span>Исключения, при выполнении скрипта</span></h3>
<p id="3152" class="hb hc cn ar hd b he hf hg hh hi hj hk hl hm hn ho" data-selectable-paragraph=""><span>Есть несколько общих исключений, которые возникают при выполнении выборок только с помощью оператора индексации.</span></p>
<ul class="">
<li id="2d16" class="hb hc cn ar hd b he hp hg hq hi hr hk hs hm ht ho is hv hw" data-selectable-paragraph=""><span>Если вы ошиблись словом, вы получите </span><strong class="hd js">KeyError</strong></li>
<li id="511a" class="hb hc cn ar hd b he ib hg ic hi id hk ie hm if ho is hv hw" data-selectable-paragraph=""><span>Если вы забыли использовать список, содержащий несколько столбцов, вы также получите </span><strong class="hd js">KeyError</strong></li>
</ul>
<pre class="EnlighterJSRAW" data-enlighter-language="null">print(df['ПодразделениЯ'])
Результат: 
KeyError: 'ПодразделениЯ'

print(df['Номенклатура','Подразделение'])
Результат:
KeyError: ('Номенклатура', 'Подразделение')</pre>
<p>В первом случае должно стоять <code class="EnlighterJSRAW">print(df['Подразделение'])</code>. А во-втором случае: <code class="EnlighterJSRAW" data-enlighter-language="null">print(df[['Номенклатура','Подразделение']])</code>.</p>
<h2>Выборка данных из Pandas DataFrame с помощью .loc</h2>
<p><span>В </span><strong class="hd js">.loc </strong><span>индексатор выбирает данные по-другому, чем просто оператор индексации. Он может выбирать подмножества строк и/или столбцов. Самое главное, он выбирает данные только по </span><strong class="hd js"><span>метке</span></strong><span><strong> (label)</strong> строк и столбцов.</span></p>
<h3 id="a176" class="gi gj cn ar aq gk gl gm gn go gp gq gr gs gt gu gv"><span>Выберем одну строку как Series с .loc</span></h3>
<p id="0a00" class="hb hc cn ar hd b he hf hg hh hi hj hk hl hm hn ho" data-selectable-paragraph=""><span></span><strong class="hd js">.loc &#8212; </strong><span>Индексатор возвращает одну строку в серии, когда указали одну метку строки (один индекс).</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">import pandas as pd
import numpy as np

df = pd.read_csv('D:\#python#\example\SampleData_Pandas.csv', sep=';')

print(df.loc[0])</pre>
<p><strong>Результат:</strong></p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">Дата                 01.01.2016
Подразделение      Отдел продаж
Контрагент           Абакус ООО
Менеджер                 Петров
Номенклатура               Лыжи
Продажи             956898,3051
Себестоимость       621983,8983
Валовая прибыль     334914,4068
Name: 0, dtype: object</pre>
<p>Теперь у нас есть Series, где старые имена столбцов теперь являются индексными метками.</p>
<h3 id="8c75" class="gi gj cn ar aq gk gl gm gn go gp gq gr gs gt gu gv"><span>Выбираем несколько строк из DataFrame с помощью .loc</span></h3>
<p id="1ffb" class="hb hc cn ar hd b he hf hg hh hi hj hk hl hm hn ho" data-selectable-paragraph=""><span>Чтобы выбрать несколько строк, поместите все метки строк, которые вы хотите выбрать, в список и передайте их <strong>.loc</strong></span><span>. Давайте выберем 3 и 20</span><span>.</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">import pandas as pd
import numpy as np

df = pd.read_csv('D:\#python#\example\SampleData_Pandas.csv', sep=';')

print(df.loc[[3,20]])</pre>
<p data-selectable-paragraph=""><strong>Результат:</strong></p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">          Дата      Подразделение  ... Себестоимость Валовая прибыль
3   01.01.2016  Отдел продвижения  ...   55859,11017     18619,70339
20  01.01.2016       Отдел продаж  ...   80585,27542     26861,75847

[2 rows x 8 columns]</pre>
<h3 id="8449" class="gi gj cn ar aq gk gl gm gn go gp gq gr gs gt gu gv"><span>Обозначение среза для выборки диапазона строк с .loc</span></h3>
<p id="0752" class="hb hc cn ar hd b he hf hg hh hi hj hk hl hm hn ho" data-selectable-paragraph=""><span>Можно «нарезать» строки DataFrame с </span><code class="gw gx gy gz ha b">.loc</code><span>помощью </span><strong class="hd js"><span>нотации среза</span></strong><span>. Для обозначения среза используется двоеточие для разделения значений </span><strong class="hd js"><span>начала</span></strong><span>, </span><strong class="hd js"><span>остановки</span></strong><span> и </span><strong class="hd js"><span>шага</span></strong><span> . Например, мы можем выбрать все строки из с 134 по 139</span><span>:</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">import pandas as pd
import numpy as np

df = pd.read_csv('D:\#python#\example\SampleData_Pandas.csv', sep=';')

print(df.loc[134:139])</pre>
<p data-selectable-paragraph=""><strong>Результат:</strong></p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">           Дата      Подразделение  ... Себестоимость Валовая прибыль
134  01.01.2016  Отдел продвижения  ...   560,5932203     62,28813559
135  01.01.2016       Отдел продаж  ...   625773,3051     268188,5593
136  01.01.2016  Отдел продвижения  ...   508671,6102     218002,1186
137  01.01.2016  Отдел продвижения  ...   1034427,966     443326,2712
138  01.01.2016  Отдел продвижения  ...   55792,37288     18597,45763
139  01.01.2016  Отдел продвижения  ...   8477,542373     941,9491525

[6 rows x 8 columns]</pre>
<h4 id="6c5f" class="gi gj cn ar aq gk gl gm gn go gp gq gr gs gt gu gv"><span>.loc включает в себя последнее значение из обозначения среза</span></h4>
<p id="88ad" class="hb hc cn ar hd b he hf hg hh hi hj hk hl hm hn ho" data-selectable-paragraph=""><span>Обратите внимание, что строка с пометкой 139 в примере без шага </span><span>была выведена. В других контейнерах данных, таких как списки Python, последнее значение исключается.</span></p>
<h4>Вывод среза с использованием .loc и шага из DataFrame</h4>
<p data-selectable-paragraph="">Выведем тот же самый результат, только будем выводить каждый второй элемент из среза:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">import pandas as pd
import numpy as np

df = pd.read_csv('D:\#python#\example\SampleData_Pandas.csv', sep=';')

print(df.loc[134:139:2])</pre>
<p><strong>Результат:</strong></p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">           Дата      Подразделение  ... Себестоимость Валовая прибыль
134  01.01.2016  Отдел продвижения  ...   560,5932203     62,28813559
136  01.01.2016  Отдел продвижения  ...   508671,6102     218002,1186
138  01.01.2016  Отдел продвижения  ...   55792,37288     18597,45763

[3 rows x 8 columns]</pre>
<h4>Выбор до указанной позиции .loc</h4>
<p><strong>Пример скрипта Python 3 для вывода 139 первых строк из Pandas DataFrame:</strong></p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">import pandas as pd
import numpy as np

df = pd.read_csv('D:\#python#\example\SampleData_Pandas.csv', sep=';')

print(df.loc[:139])</pre>
<p><strong>Результат:</strong></p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">           Дата      Подразделение  ... Себестоимость Валовая прибыль
0    01.01.2016       Отдел продаж  ...   621983,8983     334914,4068
1    01.01.2016  Отдел продвижения  ...   1289364,407     552584,7458
2    01.01.2016  Отдел продвижения  ...    736779,661     315762,7119
3    01.01.2016  Отдел продвижения  ...   55859,11017     18619,70339
..          ...                ...  ...           ...             ...
136  01.01.2016  Отдел продвижения  ...   508671,6102     218002,1186
137  01.01.2016  Отдел продвижения  ...   1034427,966     443326,2712
138  01.01.2016  Отдел продвижения  ...   55792,37288     18597,45763
139  01.01.2016  Отдел продвижения  ...   8477,542373     941,9491525

[140 rows x 8 columns]</pre>
<p>Тот же самый пример, но выведем с шагом 25:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">import pandas as pd
import numpy as np

df = pd.read_csv('D:\#python#\example\SampleData_Pandas.csv', sep=';')

print(df.loc[:139:25])</pre>
<p><strong>Результат выполнения выборки данных из Pandas DataFrame:</strong></p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">           Дата      Подразделение  ... Себестоимость Валовая прибыль
0    01.01.2016       Отдел продаж  ...   621983,8983     334914,4068
25   01.01.2016       Отдел продаж  ...   12813,55932     5491,525424
50   01.01.2016       Отдел продаж  ...   42978,81356     14326,27119
75   01.01.2016  Отдел продвижения  ...   6246,610169     694,0677966
100  01.01.2016  Отдел продвижения  ...   89694,91525     38440,67797
125  01.01.2016  Отдел продвижения  ...   879864,4068     377084,7458

[6 rows x 8 columns]</pre>
<h4>Выбор с указанной позиции до конца DataFrame через .loc</h4>
<p><strong>Полный код вывода данных из Pandas DataFrame:</strong></p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">import pandas as pd
import numpy as np

df = pd.read_csv('D:\#python#\example\SampleData_Pandas.csv', sep=';')

print(df.loc[2660:])</pre>
<p><strong>Результат запроса к DataFrame:</strong></p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">            Дата      Подразделение  ... Себестоимость Валовая прибыль
2660  01.12.2017       Отдел продаж  ...   762,7118644     84,74576271
2661  01.12.2017       Отдел продаж  ...   381,3559322     42,37288136
2662  01.12.2017       Отдел продаж  ...  -9915,254237    -5338,983051
2663  01.12.2017       Отдел продаж  ...   5314576,271     2861694,915
2664  01.12.2017       Отдел продаж  ...   154067,7966     17118,64407
2665  01.12.2017  Отдел продвижения  ...   15254,23729     1694,915254
2666  01.12.2017  Отдел продвижения  ...   9915,254237     5338,983051
2667  01.12.2017  Отдел продвижения  ...   1083686,441     361228,8136
2668  01.12.2017  Отдел продвижения  ...   3050,847458     338,9830508

[9 rows x 8 columns]</pre>
<p>Тот же пример, но с шагом 3 (<strong>вывод каждого третьего элемента из Pandas DataFrame с использованием .iloc[]</strong>):</p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">import pandas as pd
import numpy as np

df = pd.read_csv('D:\#python#\example\SampleData_Pandas.csv', sep=';')

print(df.loc[2660::3])</pre>
<p>Результат:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">            Дата      Подразделение  ... Себестоимость Валовая прибыль
2660  01.12.2017       Отдел продаж  ...   762,7118644     84,74576271
2663  01.12.2017       Отдел продаж  ...   5314576,271     2861694,915
2666  01.12.2017  Отдел продвижения  ...   9915,254237     5338,983051

[3 rows x 8 columns]</pre>
<h3 id="472b" class="gi gj cn ar aq gk gl gm gn go gp gq gr gs gt gu gv">Выбор строк и столбцов одновременно с .loc</h3>
<p id="2a14" class="hb hc cn ar hd b he hf hg hh hi hj hk hl hm hn ho" data-selectable-paragraph=""><span>В отличие от просто оператора индексирования, можно выбирать строки и столбцы одновременно с </span><code class="gw gx gy gz ha b">.loc</code><span>. Вы делаете это, разделяя выбранные строки и столбцы </span><strong class="hd js"><span>запятой</span></strong><span>. Это будет выглядеть примерно так:</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">df.loc [row_selection, column_selection]</pre>
<p><strong>Пример запроса на Python 3:</strong></p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">import pandas as pd
import numpy as np

df = pd.read_csv('D:\#python#\example\SampleData_Pandas.csv', sep=';')

print(df.loc[[150,163],['Подразделение','Менеджер','Продажи']])</pre>
<p><strong>Результат:</strong></p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">         Подразделение Менеджер      Продажи
150       Отдел продаж   Петров   1067796,61
163  Отдел продвижения  Сидоров  13665,25424</pre>
<h3 id="b8d6" class="gi gj cn ar aq gk gl gm gn go gp gq gr gs gt gu gv"><span>Используйте любую комбинацию выбора для строки или столбца с .loc</span></h3>
<p id="952c" class="hb hc cn ar hd b he hf hg hh hi hj hk hl hm hn ho" data-selectable-paragraph=""><span>Выбор строки или столбца может быть совершен любым из следующих способов:</span></p>
<ul class="">
<li id="7ed7" class="hb hc cn ar hd b he hp hg hq hi hr hk hs hm ht ho is hv hw" data-selectable-paragraph=""><span>Один ярлык</span></li>
<li id="3f7f" class="hb hc cn ar hd b he ib hg ic hi id hk ie hm if ho is hv hw" data-selectable-paragraph=""><span>Список ярлыков</span></li>
<li id="8fef" class="hb hc cn ar hd b he ib hg ic hi id hk ie hm if ho is hv hw" data-selectable-paragraph=""><span>slice с метками</span></li>
</ul>
<p id="a767" class="hb hc cn ar hd b he hp hg hq hi hr hk hs hm ht ho" data-selectable-paragraph=""><span>Мы можем использовать любой из этих трех вариантов для выбора строки или столбца с помощью </span><code class="gw gx gy gz ha b"></code><strong class="hd js">.loc</strong><span>. Давайте посмотрим несколько примеров.</span></p>
<p data-selectable-paragraph=""><strong>Пример 1 &#171;Выборка данных из Pandas DataFrame&#187;:</strong></p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">import pandas as pd
import numpy as np

df = pd.read_csv('D:\#python#\example\SampleData_Pandas.csv', sep=';')

print(df.loc[150:163:3,['Подразделение','Менеджер','Продажи']])</pre>
<p><strong>Результат:</strong></p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">         Подразделение  Менеджер      Продажи
150       Отдел продаж    Петров   1067796,61
153  Отдел продвижения  Добряков  82944,91525
156  Отдел продвижения  Добряков  85023,30508
159       Отдел продаж    Петров  499385,5932
162  Отдел продвижения   Сидоров  130805,0847</pre>
<h3 id="281b" class="gi gj cn ar aq gk gl gm gn go gp gq gr gs gt gu gv"><span>Выбор строк и столбцов через переменные</span></h3>
<p id="5371" class="hb hc cn ar hd b he hf hg hh hi hj hk hl hm hn ho" data-selectable-paragraph=""><span>Гораздо проще назначить список строк и столбцов переменным перед использованием в </span><code class="gw gx gy gz ha b">.loc</code><span>. Это полезно, если вы выбираете много строк или столбцов:</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">import pandas as pd
import numpy as np

df = pd.read_csv('D:\#python#\example\SampleData_Pandas.csv', sep=';')

rows = [59, 134, 1045]
columns = ['Контрагент', 'Номенклатура', 'Продажи'] 
print(df.loc[rows, columns])</pre>
<p data-selectable-paragraph=""><strong>Результат:</strong></p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">        Контрагент Номенклатура      Продажи
59        ИП Лусон   Велосипеды  1139110,169
134        Союз АО       Прочее  622,8813559
1045  Эсвольтр ООО       Прочее  2915,254237</pre>
<p data-selectable-paragraph=""><strong>Пример параметризации с slice:</strong></p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">import pandas as pd
import numpy as np

df = pd.read_csv('D:\#python#\example\SampleData_Pandas.csv', sep=';')

iStart = 59
iEnd = 134
iStep = 7
columns = ['Контрагент', 'Номенклатура', 'Продажи'] 
print(df.loc[iStart:iEnd:iStep, columns])</pre>
<p data-selectable-paragraph=""><strong>Результат:</strong></p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">import pandas as pd
import numpy as np

df = pd.read_csv('D:\#python#\example\SampleData_Pandas.csv', sep=';')

iStart = 59
iEnd = 134
iStep = 7
columns = ['Контрагент', 'Номенклатура', 'Продажи'] 
print(df.loc[iStart:iEnd:iStep, columns])</pre>
<h2 id="2864" class="hb hc cn ar hd b he hp hg hq hi hr hk hs hm ht ho">Выборка данных из Pandas DataFrame с помощью индексатора .iloc[]</h2>
<p>.iloc индексатор очень похож на .loc, но использует только целое число позиций, по которым необходимо сделать выборку.</p>
<h3>Выбор одной строки при помощи .iloc</h3>
<p><span>Передав одно целое число в </span><code class="gw gx gy gz ha b">.iloc</code><span>, он выберет одну строку в качестве ряда:</span></p>
<p><strong>Код запроса:</strong></p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">import pandas as pd
import numpy as np

df = pd.read_csv('D:\#python#\example\SampleData_Pandas.csv', sep=';')

print(df.iloc[5])</pre>
<p><strong>Результат:</strong></p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">Дата                  01.01.2016
Подразделение       Отдел продаж
Контрагент         Билли Боб ООО
Менеджер                Илинская
Номенклатура               Доски
Продажи              1263241,525
Себестоимость        884269,0678
Валовая прибыль      378972,4576
Name: 5, dtype: object</pre>
<h3 id="3c23" class="gi gj cn ar aq gk gl gm gn go gp gq gr gs gt gu gv"><span>Выбор нескольких строк с .iloc</span></h3>
<p id="bc35" class="hb hc cn ar hd b he hf hg hh hi hj hk hl hm hn ho" data-selectable-paragraph=""><span>Используйте список целых чисел, чтобы выбрать несколько строк:</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">import pandas as pd
import numpy as np

df = pd.read_csv('D:\#python#\example\SampleData_Pandas.csv', sep=';')

print(df.iloc[[5,45,876]])</pre>
<p>Результат:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">           Дата      Подразделение  ... Себестоимость Валовая прибыль
5    01.01.2016       Отдел продаж  ...   884269,0678     378972,4576
45   01.01.2016       Отдел продаж  ...   162972,4576     69845,33898
876  01.08.2016  Отдел продвижения  ...   444322,0339     190423,7288

[3 rows x 8 columns]</pre>
<h3 id="c375" class="gi gj cn ar aq gk gl gm gn go gp gq gr gs gt gu gv"><span>Выборка диапазона строк через указание среза в .iloc</span></h3>
<p id="e0e5" class="hb hc cn ar hd b he hf hg hh hi hj hk hl hm hn ho" data-selectable-paragraph=""><span>В случае с .iloc нотация слайса работает так же, как и список, и исключает последний элемент.</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">import pandas as pd
import numpy as np

df = pd.read_csv('D:\#python#\example\SampleData_Pandas.csv', sep=';')

print(df.iloc[5:9])</pre>
<p data-selectable-paragraph=""><strong>Результат:</strong></p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">         Дата      Подразделение  ... Себестоимость Валовая прибыль
5  01.01.2016       Отдел продаж  ...   884269,0678     378972,4576
6  01.01.2016       Отдел продаж  ...   16517,47881     5505,826271
7  01.01.2016       Отдел продаж  ...   1098,305085     122,0338983
8  01.01.2016  Отдел продвижения  ...   22957,62712     9838,983051

[4 rows x 8 columns]</pre>
<h1 id="8023" class="gi gj cn ar aq gk gl gm gn go gp gq gr gs gt gu gv" data-selectable-paragraph=""><span>Выбор строк и столбцов одновременно в .iloc</span></h1>
<p id="0485" class="hb hc cn ar hd b he hf hg hh hi hj hk hl hm hn ho" data-selectable-paragraph="">Рассмотрим несколько примеров, чтобы понять, чем отличается .iloc от .loc.</p>
<p id="e2d4" class="hb hc cn ar hd b he hp hg hq hi hr hk hs hm ht ho" data-selectable-paragraph=""><span>Выберем две строки и два столбца:</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">import pandas as pd
import numpy as np

df = pd.read_csv('D:\#python#\example\SampleData_Pandas.csv', sep=';')

print(df.iloc[[2,3], [0,3]])</pre>
<p>Результат:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">         Дата Менеджер
2  01.01.2016  Сидоров
3  01.01.2016  Сидоров</pre>
<p>Осуществим выборку строк и столбцов с помощью среза:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">import pandas as pd
import numpy as np

df = pd.read_csv('D:\#python#\example\SampleData_Pandas.csv', sep=';')

print(df.iloc[2:9, 0:3])</pre>
<p>Результат:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">         Дата      Подразделение     Контрагент
2  01.01.2016  Отдел продвижения     Абакус ООО
3  01.01.2016  Отдел продвижения     Абакус ООО
4  01.01.2016       Отдел продаж  Билли Боб ООО
5  01.01.2016       Отдел продаж  Билли Боб ООО
6  01.01.2016       Отдел продаж  Билли Боб ООО
7  01.01.2016       Отдел продаж  Билли Боб ООО
8  01.01.2016  Отдел продвижения  Билли Боб ООО</pre>
<p><strong>Выберем 1 значение из столбца и указанной колонки:</strong></p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">import pandas as pd
import numpy as np

df = pd.read_csv('D:\#python#\example\SampleData_Pandas.csv', sep=';')

print(df.loc[3, 4])</pre>
<p><strong>Результат:</strong></p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">Палатки</pre>
<h2>Резюме по .loc и .iloc</h2>
<p><strong>Доступ к строкам и колонкам по индексу возможен несколькими способами:</strong></p>
<ul>
<li><strong>.loc</strong> &#8212; используется для доступа по строковой метке &#8212; т.е. фактически по значению индекса и по названию столбца</li>
<li><strong>.iloc</strong> &#8212; используется для доступа по числовому значению (начиная от 0) &#8212; т.е. по номеру строки и номеру столбца</li>
</ul>
<p><a href="https://python.ivan-shamaev.ru/wp-content/uploads/2019/04/Pandas_DataFrame_Python3_For_Data_Science.png"><img decoding="async" src="https://python.ivan-shamaev.ru/wp-content/uploads/2019/04/Pandas_DataFrame_Python3_For_Data_Science.png" alt="" width="2339" height="1654" class="aligncenter size-full wp-image-303" srcset="https://python.ivan-shamaev.ru/wp-content/uploads/2019/04/Pandas_DataFrame_Python3_For_Data_Science.png 2339w, https://python.ivan-shamaev.ru/wp-content/uploads/2019/04/Pandas_DataFrame_Python3_For_Data_Science-300x212.png 300w, https://python.ivan-shamaev.ru/wp-content/uploads/2019/04/Pandas_DataFrame_Python3_For_Data_Science-768x543.png 768w, https://python.ivan-shamaev.ru/wp-content/uploads/2019/04/Pandas_DataFrame_Python3_For_Data_Science-1024x724.png 1024w" sizes="(max-width: 2339px) 100vw, 2339px" /></a></p>
<p><a href="https://python.ivan-shamaev.ru/wp-content/uploads/2019/04/Pandas_DataFrame_Python_selections_and_indexing.png"><img decoding="async" src="https://python.ivan-shamaev.ru/wp-content/uploads/2019/04/Pandas_DataFrame_Python_selections_and_indexing.png" alt="" width="1400" height="1000" class="aligncenter size-full wp-image-304" srcset="https://python.ivan-shamaev.ru/wp-content/uploads/2019/04/Pandas_DataFrame_Python_selections_and_indexing.png 1400w, https://python.ivan-shamaev.ru/wp-content/uploads/2019/04/Pandas_DataFrame_Python_selections_and_indexing-300x214.png 300w, https://python.ivan-shamaev.ru/wp-content/uploads/2019/04/Pandas_DataFrame_Python_selections_and_indexing-768x549.png 768w, https://python.ivan-shamaev.ru/wp-content/uploads/2019/04/Pandas_DataFrame_Python_selections_and_indexing-1024x731.png 1024w" sizes="(max-width: 1400px) 100vw, 1400px" /></a></p>
<p><a href="https://python.ivan-shamaev.ru/wp-content/uploads/2019/04/cheat_sheet_pandas_dataframe_object.jpg"><img decoding="async" src="https://python.ivan-shamaev.ru/wp-content/uploads/2019/04/cheat_sheet_pandas_dataframe_object.jpg" alt="" width="1120" height="1576" class="aligncenter size-full wp-image-305" srcset="https://python.ivan-shamaev.ru/wp-content/uploads/2019/04/cheat_sheet_pandas_dataframe_object.jpg 1120w, https://python.ivan-shamaev.ru/wp-content/uploads/2019/04/cheat_sheet_pandas_dataframe_object-213x300.jpg 213w, https://python.ivan-shamaev.ru/wp-content/uploads/2019/04/cheat_sheet_pandas_dataframe_object-768x1081.jpg 768w, https://python.ivan-shamaev.ru/wp-content/uploads/2019/04/cheat_sheet_pandas_dataframe_object-728x1024.jpg 728w" sizes="(max-width: 1120px) 100vw, 1120px" /></a></p>
<h2 class="entry-title"><span>Как выбрать строки из Pandas DataFrame по условию</span></h2>
<p>Собираем тестовый набор данных для иллюстрации работы выборки по условию</p>
<table width="179">
<tbody>
<tr>
<td width="52"><strong>Color</strong></td>
<td width="79"><strong>Shape</strong></td>
<td width="48"><strong>Price</strong></td>
</tr>
<tr>
<td width="52">Green</td>
<td width="79">Rectangle</td>
<td width="48">10</td>
</tr>
<tr>
<td width="52">Green</td>
<td width="79">Rectangle</td>
<td width="48">15</td>
</tr>
<tr>
<td width="52">Green</td>
<td width="79">Square</td>
<td width="48">5</td>
</tr>
<tr>
<td width="52">Blue</td>
<td width="79">Rectangle</td>
<td width="48">5</td>
</tr>
<tr>
<td width="52">Blue</td>
<td width="79">Square</td>
<td width="48">10</td>
</tr>
<tr>
<td width="52">Red</td>
<td width="79">Square</td>
<td width="48">15</td>
</tr>
<tr>
<td width="52">Red</td>
<td width="79">Square</td>
<td width="48">15</td>
</tr>
<tr>
<td width="52">Red</td>
<td width="79">Rectangle</td>
<td width="48">5</td>
</tr>
</tbody>
</table>
<p><strong>Пишем скрипт:</strong></p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">import pandas as pd

Boxes = {'Color': ['Green','Green','Green','Blue','Blue','Red','Red','Red'],
         'Shape': ['Rectangle','Rectangle','Square','Rectangle','Square','Square','Square','Rectangle'],
         'Price': [10,15,5,5,10,15,15,5]
        }

df = pd.DataFrame(Boxes, columns= ['Color','Shape','Price'])
print (df)</pre>
<p>Результат выполнения:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">   Color      Shape  Price
0  Green  Rectangle     10
1  Green  Rectangle     15
2  Green     Square      5
3   Blue  Rectangle      5
4   Blue     Square     10
5    Red     Square     15
6    Red     Square     15
7    Red  Rectangle      5</pre>
<h3>Синтаксис выборки строк из Pandas DataFrame по условию</h3>
<p><span>Вы можете использовать следующую логику для выбора строк в Pandas DataFrame по условию:</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">df.loc[df.column name condition]</pre>
<p><span>Например, если вы хотите получить строки с </span><em><span>зеленым цветом</span></em><span> , вам нужно применить:</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">df.loc[df.Color == 'Green']</pre>
<p><span>Где:</span></p>
<ul>
<li><span><strong>Color</strong> &#8212; это название столбца</span></li>
<li><span><strong>Green</strong> &#8212; это условие (значение колонки)</span></li>
</ul>
<p><span>А вот полный код Python для нашего примера:</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">import pandas as pd

Boxes = {'Color': ['Green','Green','Green','Blue','Blue','Red','Red','Red'],
         'Shape': ['Rectangle','Rectangle','Square','Rectangle','Square','Square','Square','Rectangle'],
         'Price': [10,15,5,5,10,15,15,5]
        }

df = pd.DataFrame(Boxes, columns= ['Color','Shape','Price'])
print (df.loc[df.Color == 'Green'])</pre>
<p><strong>Результат:</strong></p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">   Color      Shape  Price
0  Green  Rectangle     10
1  Green  Rectangle     15
2  Green     Square      5</pre>
<h3><span>Выберем строки, где цена равна или больше 10</span></h3>
<p><span>Чтобы получить все строки, где цена равна или больше 10, Вам нужно применить следующее условие:</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">df.loc[df.Price &gt;= 10]</pre>
<p><span>Полный код Python:</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">import pandas as pd

Boxes = {'Color': ['Green','Green','Green','Blue','Blue','Red','Red','Red'],
         'Shape': ['Rectangle','Rectangle','Square','Rectangle','Square','Square','Square','Rectangle'],
         'Price': [10,15,5,5,10,15,15,5]
        }

df = pd.DataFrame(Boxes, columns= ['Color','Shape','Price'])

print (df.loc[df.Price &gt;= 10])</pre>
<p><strong>Результат:</strong></p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">   Color      Shape  Price
0  Green  Rectangle     10
1  Green  Rectangle     15
4   Blue     Square     10
5    Red     Square     15
6    Red     Square     15</pre>
<h3>Выберем строки, в которых цвет зеленый, а форма &#8212; прямоугольник</h3>
<p><span>Теперь цель состоит в том, чтобы выбрать строки на основе </span><em><span>двух</span></em><span> условий:</span></p>
<ul>
<li><span>Color зеленый; </span><em><span>а также</span></em></li>
<li><span>Shape = прямоугольник</span></li>
</ul>
<p><span>Мы будем использовать символ </span><span><strong>&amp;</strong></span><span> для применения нескольких условий. В нашем примере код будет выглядеть так:</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">df.loc[(df.Color == 'Green') &amp; (df.Shape == 'Rectangle')]</pre>
<p><strong>Полный код примера Python для выборки Pandas DataFrame:</strong></p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">import pandas as pd

Boxes = {'Color': ['Green','Green','Green','Blue','Blue','Red','Red','Red'],
         'Shape': ['Rectangle','Rectangle','Square','Rectangle','Square','Square','Square','Rectangle'],
         'Price': [10,15,5,5,10,15,15,5]
        }

df = pd.DataFrame(Boxes, columns= ['Color','Shape','Price'])

print (df.loc[(df.Color == 'Green') &amp; (df.Shape == 'Rectangle')])
</pre>
<p><strong>Результат:</strong></p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">   Color      Shape  Price
0  Green  Rectangle     10
1  Green  Rectangle     15</pre>
<h3>Выберем строки, где цвет зеленый ИЛИ форма прямоугольная</h3>
<p><span>Для достижения этой цели будем использовать</span><span> </span><span>символ | следующим образом:</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">df.loc[(df.Color == 'Green') | (df.Shape == 'Rectangle')]</pre>
<p><strong>Полный код Python 3:</strong></p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">import pandas as pd

Boxes = {'Color': ['Green','Green','Green','Blue','Blue','Red','Red','Red'],
         'Shape': ['Rectangle','Rectangle','Square','Rectangle','Square','Square','Square','Rectangle'],
         'Price': [10,15,5,5,10,15,15,5]
        }

df = pd.DataFrame(Boxes, columns= ['Color','Shape','Price'])

print (df.loc[(df.Color == 'Green') | (df.Shape == 'Rectangle')])</pre>
<p>Результат:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">   Color      Shape  Price<br />0  Green  Rectangle     10<br />1  Green  Rectangle     15<br />2  Green     Square      5<br />3   Blue  Rectangle      5<br />7    Red  Rectangle      5</pre>
<h3>Выберем строки, где цена не равна 15</h3>
<p>Мы будем использовать комбинацию символов !=, чтобы выбрать строки, цена которых не равна 15:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">df.loc[df.Price != 15]</pre>
<p><strong>Полный код Pandas DF на питоне:</strong></p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">import pandas as pd

Boxes = {'Color': ['Green','Green','Green','Blue','Blue','Red','Red','Red'],
         'Shape': ['Rectangle','Rectangle','Square','Rectangle','Square','Square','Square','Rectangle'],
         'Price': [10,15,5,5,10,15,15,5]
        }

df = pd.DataFrame(Boxes, columns= ['Color','Shape','Price'])

print (df.loc[df.Price != 15])</pre>
<p><strong>Результат работы скрипта Python:</strong></p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">   Color      Shape  Price
0  Green  Rectangle     10
2  Green     Square      5
3   Blue  Rectangle      5
4   Blue     Square     10
7    Red  Rectangle      5</pre>
<h1><strong>Data Wrangling with Pandas</strong></h1>
<ul>
<li><a href="https://python.ivan-shamaev.ru/wp-content/uploads/2019/04/Data_Wrangling_Pandas_Cheat_Sheet.pdf">Data Wrangling Pandas Cheat Sheet.pdf</a></li>
<li><a href="https://towardsdatascience.com/data-wrangling-with-pandas-5b0be151df4e" target="_blank" rel="noopener noreferrer">Data Wrangling With Pandas</a></li>
</ul>
<p><a href="https://python.ivan-shamaev.ru/wp-content/uploads/2019/04/Data_Wrangling_Pandas_Cheat_Sheet_1.png" target="_blank" rel="noopener noreferrer"><img decoding="async" src="https://python.ivan-shamaev.ru/wp-content/uploads/2019/04/Data_Wrangling_Pandas_Cheat_Sheet_1.png" alt="" width="3056" height="2362" class="aligncenter wp-image-311 size-full" srcset="https://python.ivan-shamaev.ru/wp-content/uploads/2019/04/Data_Wrangling_Pandas_Cheat_Sheet_1.png 3056w, https://python.ivan-shamaev.ru/wp-content/uploads/2019/04/Data_Wrangling_Pandas_Cheat_Sheet_1-300x232.png 300w, https://python.ivan-shamaev.ru/wp-content/uploads/2019/04/Data_Wrangling_Pandas_Cheat_Sheet_1-768x594.png 768w, https://python.ivan-shamaev.ru/wp-content/uploads/2019/04/Data_Wrangling_Pandas_Cheat_Sheet_1-1024x791.png 1024w" sizes="(max-width: 3056px) 100vw, 3056px" /></a> <a href="https://python.ivan-shamaev.ru/wp-content/uploads/2019/04/Data_Wrangling_Pandas_Cheat_Sheet_2.png" target="_blank" rel="noopener noreferrer"><img decoding="async" src="https://python.ivan-shamaev.ru/wp-content/uploads/2019/04/Data_Wrangling_Pandas_Cheat_Sheet_2.png" alt="" width="3056" height="2362" class="aligncenter wp-image-312 size-full" srcset="https://python.ivan-shamaev.ru/wp-content/uploads/2019/04/Data_Wrangling_Pandas_Cheat_Sheet_2.png 3056w, https://python.ivan-shamaev.ru/wp-content/uploads/2019/04/Data_Wrangling_Pandas_Cheat_Sheet_2-300x232.png 300w, https://python.ivan-shamaev.ru/wp-content/uploads/2019/04/Data_Wrangling_Pandas_Cheat_Sheet_2-768x594.png 768w, https://python.ivan-shamaev.ru/wp-content/uploads/2019/04/Data_Wrangling_Pandas_Cheat_Sheet_2-1024x791.png 1024w" sizes="(max-width: 3056px) 100vw, 3056px" /></a></p>
<h2><strong>Обработка данных с помощью Pandas (<span style="color: #ff6600;">Data Wrangling</span>)</strong></h2>
<p>Обработка данных является одной из важнейших задач в data science и анализе данных, которая включает такие операции, как:</p>
<ul>
<li><strong>Dealing with missing values (Работа с пропущенными значениями)</strong> &#8212; количественная оценка пропущенных значений для каждого столбца, заполнение и удаление пропущенных значений.</li>
<li><strong>Reshaping data (Изменение формы данных)</strong> &#8212; единая кодировка данных, сводные таблицы, объединения, группировка и агрегирование.</li>
<li><strong>Data Sorting (Сортировка данных)</strong>: упорядочивание значений в порядке возрастания или убывания.</li>
<li><strong>Data Filtration (Фильтрация данных)</strong>: создание подмножества данных согласно тем или иным условиям.</li>
<li><strong>Data deduplication (Дедупликация данных)</strong> &#8212; это технология поиска и устранения дубликатов в хранилищах данных. Применяется для снижения накладные расходов на хранение информации.</li>
<li><strong>Data Reduction (Понижение размерности/Сокращение данных)</strong>: Уменьшение объема данных, сокращение количества используемых признаков и разнообразия их значений. Применяется в случае, когда данные избыточны. Избыточность возникает тогда, когда задачу анализа можно решить с тем же уровнем эффективности и точности, но используя меньшую размерность данных. Это позволяет сократить время и вычислительные затраты на решение задачи, сделать данные и результаты их анализа более интерпретируемыми и понятными для пользователя.</li>
<li><strong>Data Access (Доступ к данным)</strong>: для чтения или записи файлов данных.</li>
<li><strong>Data Handling/Data Processing (Обработка данных) или Data Transformation (преобразование данных)</strong>: выполнение агрегации, статистических и подобных операций над конкретными значениями.</li>
<li><strong>Другое:</strong> Создание описательных столбцов, поэлементные условные операции.</li>
</ul>
<h3><strong>Concatenation DataFrame</strong></h3>
<p>todo</p>
<h3><strong>Joining DataFrame</strong></h3>
<p>todo</p>
<h3><strong>Merging DataFrame</strong></h3>
<p>todo</p>
<h3><strong>Pivot &amp; Melt (Unpivot) DataFrame</strong></h3>
<p>todo</p>
<h3><strong>GroupBy Операции</strong></h3>
<p>todo</p>
<h3><strong>Применение Lambda функции в DataFrame</strong></h3>
<p>todo</p>
<h1 class="eg b eh eo ef"><strong>10 трюков Python Pandas, которые сделают вашу работу более эффективной</strong></h1>
<p><span><strong>Pandas</strong> &#8212; это широко используемый пакет Python для структурированных данных.</span></p>
<h2 id="893e" class="hw hx ef at as hy hz ia ib ic id ie if ig ih ii ij"><strong>read_csv</strong></h2>
<p id="6600" class="hi hj ef at hk b hl ik hn il hp im hr in ht io hv" data-selectable-paragraph=""><span>Все знают эту команду. Но данные, которые вы пытаетесь прочитать, велики, попробуйте добавить этот аргумент: </span><strong class="hk ip"><span>nrows = 5,</span></strong><span> чтобы загружать только часть данных. Тогда вы можете избежать ошибки, выбрав неправильный разделитель (он не всегда может быть разделен запятой).</span></p>
<p id="6108" class="hi hj ef at hk b hl hm hn ho hp hq hr hs ht hu hv" data-selectable-paragraph=""><span>(Или вы можете использовать команду &#8216;head&#8217; в linux, чтобы проверить первые 5 строк (скажем) в любом текстовом файле: </span><strong class="hk ip"><span>head -n 5 data.txt</span></strong><span>)</span></p>
<p id="5e92" class="hi hj ef at hk b hl hm hn ho hp hq hr hs ht hu hv" data-selectable-paragraph=""><span>Затем вы можете извлечь список столбцов, используя </span><code class="gt iq ir is it b">df.columns.tolist()</code><span>для извлечения всех столбцов, а затем добавить </span><strong class="hk ip"><span>аргумент usecols = [&#8216;c1&#8217;, &#8216;c2&#8217;,…],</span></strong><span> чтобы загрузить нужные вам столбцы. </span></p>
<p class="hi hj ef at hk b hl hm hn ho hp hq hr hs ht hu hv" data-selectable-paragraph=""><span>Кроме того, если вы знаете типы данных нескольких определенных столбцов, вы можете добавить аргумент </span><strong class="hk ip"><span>dtype = {&#8216;c1&#8217;: str, &#8216;c2&#8217;: int,…},</span></strong><span> чтобы он загружался быстрее. </span></p>
<p class="hi hj ef at hk b hl hm hn ho hp hq hr hs ht hu hv" data-selectable-paragraph=""><span>Еще одно преимущество этого аргумента в том, что если у вас есть столбец, который содержит как строки, так и числа, рекомендуется объявить его тип строковым, чтобы не возникало ошибок при попытке объединить таблицы, используя этот столбец в качестве ключа.</span></p>
<h2 id="51fd" class="hw hx ef at as hy hz ia ib ic id ie if ig ih ii ij"><strong>select_dtypes</strong></h2>
<p id="fe3b" class="hi hj ef at hk b hl ik hn il hp im hr in ht io hv" data-selectable-paragraph=""><span>Если предварительная обработка данных должна выполняться в <strong>Python</strong>, эта команда сэкономит вам время. После чтения в таблице типами данных по-умолчанию для каждого столбца могут быть bool, int64, float64, object, category, timedelta64 или datetime64. Вы можете сначала проверить распределение по</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">df.dtypes.value_counts()</pre>
<p id="e108" class="hi hj ef at hk b hl hm hn ho hp hq hr hs ht hu hv" data-selectable-paragraph=""><span>чтобы узнать все возможные типы данных вашего DataFrame</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">df.select_dtypes(include=['float64', 'int64'])</pre>
<p id="10fb" class="hi hj ef at hk b hl hm hn ho hp hq hr hs ht hu hv" data-selectable-paragraph=""><span>выбрать sub-dataframe только с числовыми характеристиками.</span></p>
<h2 id="ee83" class="hw hx ef at as hy hz ia ib ic id ie if ig ih ii ij">copy()</h2>
<p id="df2a" class="hi hj ef at hk b hl ik hn il hp im hr in ht io hv" data-selectable-paragraph=""><span>Это важная команда, если вы еще не слышали о ней. Если вы выполните следующие команды:</span></p>
<pre class="gd ge gf gg gh iu iv cm">import pandas as pd<br />df1 = pd.DataFrame({ 'a':[0,0,0], 'b': [1,1,1]})<br />df2 = df1<br />df2['a'] = df2['a'] + 1<br />df1.head()</pre>
<p id="e7ea" class="hi hj ef at hk b hl hm hn ho hp hq hr hs ht hu hv" data-selectable-paragraph=""><span>Вы обнаружите, что <strong>df1</strong> изменен. Это потому, что <strong>df2 = df1</strong> не делает копию <strong>df1</strong> и присваивает ее <strong>df2</strong>, но устанавливает указатель, указывающий на <strong>df1</strong>. Таким образом, любые изменения в <strong>df2</strong> приведут к изменениям в <strong>df1</strong>. Чтобы это исправить, вы можете сделать либо</span></p>
<pre class="gd ge gf gg gh iu iv cm">df2 = df1.copy()</pre>
<p id="eafe" class="hi hj ef at hk b hl hm hn ho hp hq hr hs ht hu hv" data-selectable-paragraph=""><span>или же</span></p>
<pre class="gd ge gf gg gh iu iv cm">from copy import deepcopy<br />df2 = deepcopy(df1)</pre>
<h2 id="be19" class="hw hx ef at as hy hz ia ib ic id ie if ig ih ii ij"><span>map()</span></h2>
<p id="0a1f" class="hi hj ef at hk b hl ik hn il hp im hr in ht io hv" data-selectable-paragraph=""><span>Это классная команда для простого преобразования данных. Сначала вы определяете словарь, в котором «ключами» являются старые значения, а «значениями» являются новые значения.</span></p>
<pre class="gd ge gf gg gh iu iv cm">level_map = {1: 'high', 2: 'medium', 3: 'low'}<br />df['c_level'] = df['c'].map(level_map)</pre>
<p id="1b9c" class="hi hj ef at hk b hl hm hn ho hp hq hr hs ht hu hv" data-selectable-paragraph=""><span><strong>Некоторые примеры:</strong> </span></p>
<p class="hi hj ef at hk b hl hm hn ho hp hq hr hs ht hu hv" data-selectable-paragraph=""><span>True, False до 1, 0 (для моделирования); определение уровней; определяемые пользователем лексические кодировки.</span></p>
<h2 id="0efe" class="hw hx ef at as hy hz ia ib ic id ie if ig ih ii ij">apply or not apply?</h2>
<p id="1a4c" class="hi hj ef at hk b hl ik hn il hp im hr in ht io hv" data-selectable-paragraph=""><span>Если мы хотим создать новый столбец с несколькими другими столбцами в качестве входных данных, функция apply иногда будет весьма полезна.</span></p>
<pre class="gd ge gf gg gh iu iv cm">def rule(x, y):<br />    if x == 'high' and y &gt; 10:<br />         return 1<br />    else:<br />         return 0<br />df = pd.DataFrame({ 'c1':[ 'high' ,'high', 'low', 'low'], 'c2': [0, 23, 17, 4]})<br />df['new'] = df.apply(lambda x: rule(x['c1'], x['c2']), axis =  1)<br />df.head()</pre>
<p id="1a16" class="hi hj ef at hk b hl hm hn ho hp hq hr hs ht hu hv" data-selectable-paragraph=""><span>В приведенных выше кодах мы определяем функцию с двумя входными переменными и используем функцию <strong>apply</strong>, чтобы применить ее к столбцам <strong>&#8216;c1&#8217;</strong> и <strong>&#8216;c2&#8217;</strong>.</span></p>
<p id="8ae2" class="hi hj ef at hk b hl hm hn ho hp hq hr hs ht hu hv" data-selectable-paragraph=""><span>Но </span><strong class="hk ip"><span>проблема «apply» в том , что иногда он слишком медленный</span></strong><span> . Скажем, если вы хотите вычислить максимум из двух столбцов <strong>«c1»</strong> и <strong>«c2»</strong>, конечно, вы можете сделать</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">df['maximum'] = df.apply(lambda x: max(x['c1'], x['c2']), axis = 1)</pre>
<p class="hi hj ef at hk b hl hm hn ho hp hq hr hs ht hu hv" data-selectable-paragraph=""><code class="gt iq ir is it b"></code><span>но вы найдете это намного медленнее, чем эта команда:</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">df['maximum'] = df[['c1','c2']].max(axis =1)</pre>
<p id="98d2" class="hi hj ef at hk b hl hm hn ho hp hq hr hs ht hu hv" data-selectable-paragraph=""><strong class="hk ip"><span>Вывод</span></strong><span>: не используйте apply, если вы можете выполнить ту же работу с другими встроенными функциями (они часто быстрее). Например, если вы хотите округлить колонку «с» целыми числами, делать </span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">round(df[‘c’], 0)</pre>
<p class="hi hj ef at hk b hl hm hn ho hp hq hr hs ht hu hv" data-selectable-paragraph=""><span>или </span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="null">df[‘c’].round(0)</pre>
<p class="hi hj ef at hk b hl hm hn ho hp hq hr hs ht hu hv" data-selectable-paragraph=""><span>Вместо использования функции применяются: </span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">df.apply(lambda x: round(x['c'], 0), axis = 1)</pre>
<h2 id="380f" class="hw hx ef at as hy hz ia ib ic id ie if ig ih ii ij">value counts</h2>
<p id="0012" class="hi hj ef at hk b hl ik hn il hp im hr in ht io hv" data-selectable-paragraph=""><span>Это команда для проверки распределения значений. Например, если вы хотите проверить возможные значения и частоту для каждого отдельного значения в столбце «c», вы можете сделать</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">df['c'].value_counts()</pre>
<p id="92e3" class="hi hj ef at hk b hl hm hn ho hp hq hr hs ht hu hv" data-selectable-paragraph=""><span>Есть несколько полезных трюков / аргументов:</span><br /><span></span></p>
<ol>
<li><span><strong class="hk ip">normalize = True</strong></span><span>: если вы хотите проверить частоту вместо количества.</span><br /><span></span></li>
<li><span><strong class="hk ip">dropna = False</strong></span><span>: если вы также хотите включить пропущенные значения в статистику.</span><br /><span></span></li>
<li><code class="gt iq ir is it b">df['c'].value_counts().reset_index()</code><span>.: если вы хотите преобразовать таблицу статистики в кадр данных pandas и манипулировать ею</span><br /><span></span></li>
<li><code class="gt iq ir is it b">df['c'].value_counts().sort_index()</code><span>: показать статистику, отсортированную по разным значениям, в столбце «c» вместо счетчиков.</span></li>
</ol>
<h2 id="9d7c" class="hw hx ef at as hy hz ia ib ic id ie if ig ih ii ij"><span>number of missing values &#8212; количество пустых значений</span></h2>
<p id="74b7" class="hi hj ef at hk b hl ik hn il hp im hr in ht io hv" data-selectable-paragraph=""><span>При построении моделей может потребоваться исключить строку со слишком большим количеством пропущенных значений / строки со всеми пропущенными значениями. Вы можете использовать <strong>.isnull()</strong> и <strong>.sum()</strong> для подсчета количества пропущенных значений в указанных столбцах.</span></p>
<pre class="gd ge gf gg gh iu iv cm">import pandas as pd<br />import numpy as np<br />df = pd.DataFrame({ 'id': [1,2,3], 'c1':[0,0,np.nan], 'c2': [np.nan,1,1]})<br />df = df[['id', 'c1', 'c2']]<br />df['num_nulls'] = df[['c1', 'c2']].isnull().sum(axis=1)<br />df.head()</pre>
<h2 id="b2a7" class="hw hx ef at as hy hz ia ib ic id ie if ig ih ii ij"><span>выбрать строки с конкретными идентификаторами (select rows with specific IDs)</span></h2>
<p id="a7d2" class="hi hj ef at hk b hl ik hn il hp im hr in ht io hv" data-selectable-paragraph=""><span>В SQL мы можем сделать это, используя <strong>SELECT * FROM … WHERE ID in (‘A001’, ‘C022’, …)</strong>, чтобы получить записи с конкретными идентификаторами. Если вы хотите сделать то же самое с Pandas, вы можете сделать</span></p>
<pre class="gd ge gf gg gh iu iv cm">df_filter = df['ID'].isin(['A001','C022',...])<br />df[df_filter]</pre>
<h2 id="261c" class="hw hx ef at as hy hz ia ib ic id ie if ig ih ii ij"><span>Процентильные группы (Percentile groups)</span></h2>
<p id="c90c" class="hi hj ef at hk b hl ik hn il hp im hr in ht io hv" data-selectable-paragraph=""><span>У вас есть числовой столбец, и вы хотите классифицировать значения в этом столбце по группам, скажем, верхние 5% в группе 1, 5–20% в группе 2, 20–50% в группе 3, нижние 50% в группе 4 Конечно, вы можете сделать это с помощью pandas.cut, но я бы хотел предоставить здесь другую опцию:</span></p>
<pre class="gd ge gf gg gh iu iv cm">import numpy as np<br />cut_points = [np.percentile(df['c'], i) for i in [50, 80, 95]]<br />df['group'] = 1<br />for i in range(3):<br />    df['group'] = df['group'] + (df['c'] &lt; cut_points[i])<br /># or &lt;= cut_points[i]</pre>
<p id="d775" class="hi hj ef at hk b hl hm hn ho hp hq hr hs ht hu hv" data-selectable-paragraph=""><span>который быстро запускается (не применяется функция apply).</span></p>
<h2 id="5535" class="hw hx ef at as hy hz ia ib ic id ie if ig ih ii ij"><span>to_csv</span></h2>
<p id="9bd9" class="hi hj ef at hk b hl ik hn il hp im hr in ht io hv" data-selectable-paragraph=""><span>Опять же, это команда, которую все будут использовать. Я хотел бы указать на две уловки здесь. Первый</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">print(df[:5].to_csv())</pre>
<p id="0413" class="hi hj ef at hk b hl hm hn ho hp hq hr hs ht hu hv" data-selectable-paragraph=""><span>Вы можете использовать эту команду, чтобы распечатать первые пять строк того, что будет записано в файл точно.</span></p>
<p id="e0c3" class="hi hj ef at hk b hl hm hn ho hp hq hr hs ht hu hv" data-selectable-paragraph=""><span>Еще один трюк &#8212; это смешанные целые числа и пропущенные значения. Если столбец содержит как пропущенные значения, так и целые числа, тип данных по-прежнему будет плавающим, а не целым. Когда вы экспортируете таблицу, вы можете добавить <strong class="hk ip">float_format=‘%.0f’</strong></span><strong class="hk ip"><span>,</span></strong><span> чтобы округлить все числа с плавающей точкой до целых чисел. Используйте этот трюк, если вам нужны только целочисленные выходные данные для всех столбцов &#8212; вы избавитесь от всех назойливых <strong>‘.0’s</strong>.</span></p><p><a class="a2a_button_telegram" href="https://www.addtoany.com/add_to/telegram?linkurl=https%3A%2F%2Fpython.ivan-shamaev.ru%2Fpandas-series-and-dataframe-objects-build-index%2F&amp;linkname=Python%203%20Pandas%3A%20%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D1%8B%20Series%20%D0%B8%20DataFrame.%20%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5%20Index" title="Telegram" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_whatsapp" href="https://www.addtoany.com/add_to/whatsapp?linkurl=https%3A%2F%2Fpython.ivan-shamaev.ru%2Fpandas-series-and-dataframe-objects-build-index%2F&amp;linkname=Python%203%20Pandas%3A%20%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D1%8B%20Series%20%D0%B8%20DataFrame.%20%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5%20Index" title="WhatsApp" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=https%3A%2F%2Fpython.ivan-shamaev.ru%2Fpandas-series-and-dataframe-objects-build-index%2F&amp;linkname=Python%203%20Pandas%3A%20%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D1%8B%20Series%20%D0%B8%20DataFrame.%20%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5%20Index" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_linkedin" href="https://www.addtoany.com/add_to/linkedin?linkurl=https%3A%2F%2Fpython.ivan-shamaev.ru%2Fpandas-series-and-dataframe-objects-build-index%2F&amp;linkname=Python%203%20Pandas%3A%20%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D1%8B%20Series%20%D0%B8%20DataFrame.%20%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5%20Index" title="LinkedIn" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_vk" href="https://www.addtoany.com/add_to/vk?linkurl=https%3A%2F%2Fpython.ivan-shamaev.ru%2Fpandas-series-and-dataframe-objects-build-index%2F&amp;linkname=Python%203%20Pandas%3A%20%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D1%8B%20Series%20%D0%B8%20DataFrame.%20%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5%20Index" title="VK" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_twitter" href="https://www.addtoany.com/add_to/twitter?linkurl=https%3A%2F%2Fpython.ivan-shamaev.ru%2Fpandas-series-and-dataframe-objects-build-index%2F&amp;linkname=Python%203%20Pandas%3A%20%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D1%8B%20Series%20%D0%B8%20DataFrame.%20%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5%20Index" title="Twitter" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_email" href="https://www.addtoany.com/add_to/email?linkurl=https%3A%2F%2Fpython.ivan-shamaev.ru%2Fpandas-series-and-dataframe-objects-build-index%2F&amp;linkname=Python%203%20Pandas%3A%20%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D1%8B%20Series%20%D0%B8%20DataFrame.%20%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5%20Index" title="Email" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fpython.ivan-shamaev.ru%2Fpandas-series-and-dataframe-objects-build-index%2F&#038;title=Python%203%20Pandas%3A%20%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D1%8B%20Series%20%D0%B8%20DataFrame.%20%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5%20Index" data-a2a-url="https://python.ivan-shamaev.ru/pandas-series-and-dataframe-objects-build-index/" data-a2a-title="Python 3 Pandas: Объекты Series и DataFrame. Построение Index"></a></p><p>Сообщение <a href="https://python.ivan-shamaev.ru/pandas-series-and-dataframe-objects-build-index/">Python 3 Pandas: Объекты Series и DataFrame. Построение Index</a> появились сначала на <a href="https://python.ivan-shamaev.ru">Python 3 | Data Science | Нейронные сети | AI - Искусственный Интеллект</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://python.ivan-shamaev.ru/pandas-series-and-dataframe-objects-build-index/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
	</channel>
</rss>
