<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: IftakharRahat</title>
    <description>The latest articles on DEV Community by IftakharRahat (@iftakharrahat).</description>
    <link>https://dev.to/iftakharrahat</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F927207%2Fad00256f-e0b7-4eba-a5ce-c5455e96e963.png</url>
      <title>DEV Community: IftakharRahat</title>
      <link>https://dev.to/iftakharrahat</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/iftakharrahat"/>
    <language>en</language>
    <item>
      <title>Python for data analysis- Pandas</title>
      <dc:creator>IftakharRahat</dc:creator>
      <pubDate>Tue, 20 Sep 2022 14:42:11 +0000</pubDate>
      <link>https://dev.to/iftakharrahat/python-for-data-analysis-pandas-2kf0</link>
      <guid>https://dev.to/iftakharrahat/python-for-data-analysis-pandas-2kf0</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;1.SERIES&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;A Series is very similar to a NumPy array (in fact it is built on top of the NumPy array object). What differentiates the NumPy array from a Series, is that a Series can have axis labels, meaning it can be indexed by a label, instead of just a number location. It also doesn't need to hold numeric data, it can hold any arbitrary Python Object.&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import numpy as np
import pandas as pd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Creating a series:
basic syntax of creating a series is &lt;strong&gt;pd.Series(data type,index)&lt;/strong&gt;
&lt;em&gt;here is some examples&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;labels = ['a','b','c']
my_list = [10,20,30]
arr = np.array([10,20,30])
d = {'a':10,'b':20,'c':30}
pd.Series(data=my_list)
output:
0    10
1    20
2    30
dtype: int64
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pd.Series(data=my_list,index=labels)
output:
a    10
b    20
c    30
dtype: int64
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;NumPy arrays
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pd.Series(arr)
output:
0    10
1    20
2    30
dtype: int64
pd.Series(arr,labels)
output:
a    10
b    20
c    30
dtype: int64
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;dictionary
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pd.Series(d)
o:
a    10
b    20
c    30
dtype: int64
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;data in a series:
_a pandas series can hold a variety of object types&lt;/em&gt;_
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pd.Series(data=labels)
o:
0    a
1    b
2    c
dtype: object
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Using an index:&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ser1 = pd.Series([1,2,3,4],index = ['USA', 'Germany','USSR', 'Japan'])  
o:
USA        1
Germany    2
USSR       3
Japan      4
dtype: int64

ser2 = pd.Series([1,2,5,4],index = ['USA', 'Germany','Italy', 'Japan'])                                   
o:
USA        1
Germany    2
Italy      5
Japan      4
dtype: int64

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Operations are then also done based off of index:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ser1 + ser2
Germany    4.0
Italy      NaN
Japan      8.0
USA        2.0
USSR       NaN
dtype: float64
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;2. DataFrames&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;DataFrames are the workhorse of pandas and are directly inspired by the R programming language. We can think of a DataFrame as a bunch of Series objects put together to share the same index.&lt;br&gt;
&lt;code&gt;import pandas as pd&lt;br&gt;
import numpy as np&lt;/code&gt;&lt;br&gt;
&lt;em&gt;syntax of dataframe:&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;pandas.DataFrame(data, index, columns)&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;randn() function in Python is used to return random values from the normal distribution in a specified shape. This function creates an array of the given shape and it fills with random samples from the normal standard distribution.&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;from numpy.random import randn
np.random.seed(101)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;df = pd.DataFrame(randn(5,4),index='A B C D E'.split(),columns='W X Y Z'.split())
    W       X               Y               Z
A   2.706850    0.628133    0.907969    0.503826
B   0.651118    -0.319318   -0.848077   0.605965
C   -2.018168   0.740122    0.528813    -0.589001
D   0.188695    -0.758872   -0.933237   0.955057
E   0.190794    1.978757    2.605967    0.683509
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;randn(5,4) here its a 2 dimensional array (5 rows and 4 columns)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Selection and indexing
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;df['W']
A    2.706850
B    0.651118
C   -2.018168
D    0.188695
E    0.190794
Name: W, dtype: float64

df[['W','Z']]

        W               Z
A   2.706850    0.503826
B   0.651118    0.605965
C   -2.018168   -0.589001
D   0.188695    0.955057
E   0.190794    0.683509
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Creating a new column
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;df['new'] = df['W'] + df['Y']
        W          X            Y          Z             NEW
A   2.706850   0.628133 0.907969   0.503826      3.614819
B   0.651118  -0.319318    -0.848077   0.605965 -0.196959
C      -2.018168   0.740122 0.528813  -0.589001 -1.489355
D   0.188695  -0.758872    -0.933237   0.955057 -0.744542
E   0.190794   1.978757 2.605967   0.683509  2.796762

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Removing column using drop method&lt;/em&gt;
for removing column we have to use axis=1. Syntax of removing column is &lt;strong&gt;df.drop('column name',axis=1)&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--blSH-9R5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hg1kwc4hatbegvk2ryud.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--blSH-9R5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hg1kwc4hatbegvk2ryud.png" alt="Image description" width="469" height="214"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Inplace: The inplace parameter enables you to modify your dataframe directly. Remember: by default, the drop() method produces a new dataframe and leaves the original dataframe unchanged. That's because by default, the inplace parameter is set to inplace = False .&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--D-tPizls--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kk8www7y5plnvstsf118.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--D-tPizls--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kk8www7y5plnvstsf118.png" alt="Image description" width="491" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dropping of rows
&lt;em&gt;while deleting rows in a dataframe we have to use axis=0&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6-Wq_YKZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/konprd2aewrn5oi0q8pl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6-Wq_YKZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/konprd2aewrn5oi0q8pl.png" alt="Image description" width="602" height="383"&gt;&lt;/a&gt;&lt;br&gt;
Or select based off of position instead of label&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uuosFN4N--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fkgqsfkld468q7nf9bip.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uuosFN4N--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fkgqsfkld468q7nf9bip.png" alt="Image description" width="382" height="154"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;_Selecting subset of rows and columns&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--THJxS0yY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cvqyd8bdta33tnhzm1t0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--THJxS0yY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cvqyd8bdta33tnhzm1t0.png" alt="Image description" width="438" height="208"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;_&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Conditional selection&lt;/strong&gt;
&lt;em&gt;An important feature of pandas is conditional selection using bracket notation, very similar to numpy&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;df&lt;br&gt;
output:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--eXQKUr37--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nmtzjyug665b53zxn9ji.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--eXQKUr37--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nmtzjyug665b53zxn9ji.png" alt="Image description" width="343" height="204"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;df&amp;gt;0&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rpgw8oPW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j0ypi49qdl8o0jth9gcn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rpgw8oPW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j0ypi49qdl8o0jth9gcn.png" alt="Image description" width="228" height="167"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;values which are greater than zero gonna be TRUE&lt;br&gt;
if we want the values in a dataframe which are TRUE, we can write df[df&amp;gt;0]&lt;br&gt;
then the output will be like this-&lt;/p&gt;

&lt;p&gt;df[df&amp;gt;0]&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kpSBbDSA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/18db0dkf5bdmx70dj1ar.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kpSBbDSA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/18db0dkf5bdmx70dj1ar.png" alt="Image description" width="319" height="170"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;again dataframe of df will remain unchanged because the method has the default inplace value of false&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lAjwwe3r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jeob87vy5l3a7e5iyj45.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lAjwwe3r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jeob87vy5l3a7e5iyj45.png" alt="Image description" width="365" height="195"&gt;&lt;/a&gt;&lt;br&gt;
df[df['W']&amp;gt;0] here values of column W whose are not greater than zero wont be shown, not only the specific value of column W but also the row of value&lt;/p&gt;

&lt;p&gt;df[df['W']&amp;gt;0]&lt;br&gt;
output:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Q6QIuq8R--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qh6srjfgj848kfc6d5p2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Q6QIuq8R--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qh6srjfgj848kfc6d5p2.png" alt="Image description" width="338" height="141"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Q6r-o-Vw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/200py1r5c7w0lo8y67ls.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Q6r-o-Vw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/200py1r5c7w0lo8y67ls.png" alt="Image description" width="261" height="329"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;For two conditions we can use | and &amp;amp; with parenthesis. we cant use 'and' 'or' because this boolean is only applicable when it has only single output 'TRUE' or 'FALSE'. But dataframe contains multiple boolean in a single column so it gets confused while executing the code&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;df[(df['W']&amp;gt;0) &amp;amp; (df['Y'] &amp;gt; 1)]&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--92RhZrHC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rk64vhj4rihvl153wajh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--92RhZrHC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rk64vhj4rihvl153wajh.png" alt="Image description" width="315" height="62"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;More index details:&lt;/em&gt;
&lt;em&gt;Let's discuss some more features of indexing, including resetting the index or setting it something else&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tCp3LDuP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kykh0k9g6tpkwea1ny4p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tCp3LDuP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kykh0k9g6tpkwea1ny4p.png" alt="Image description" width="387" height="205"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Pandas reset_index() is a method to reset index of a Data Frame. reset_index() method sets a list of integer ranging from 0 to length of data as index&lt;/em&gt;.syntax of this method-&lt;br&gt;
&lt;strong&gt;DataFrame.reset_index(level=None, drop=False, inplace=False, col_level=0, col_fill=”)&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;level: int, string or a list to select and remove passed column from index.&lt;br&gt;
drop: Boolean value, Adds the replaced index column to the data if False.&lt;br&gt;
inplace: Boolean value, make changes in the original data frame itself if True.&lt;br&gt;
col_level: Select in which column level to insert the labels.&lt;br&gt;
col_fill: Object, to determine how the other levels are named.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;df.reset_index()&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--iKZoydy7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ex1ofjhngkoew6dkng3g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iKZoydy7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ex1ofjhngkoew6dkng3g.png" alt="Image description" width="382" height="174"&gt;&lt;/a&gt;&lt;br&gt;
newind = 'CA NY WY OR CO'.split()&lt;br&gt;
df['States'] = newind&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--EuqBzxIX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ubr4cchegxgjl2tqdhk7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--EuqBzxIX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ubr4cchegxgjl2tqdhk7.png" alt="Image description" width="389" height="175"&gt;&lt;/a&gt;&lt;br&gt;
df.set_index('States')&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uIgVlVlE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r0vdgso62gsoobf1qw2s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uIgVlVlE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r0vdgso62gsoobf1qw2s.png" alt="Image description" width="375" height="196"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;But the dataframe 'df' remains unchanged beacuse reset function has the default inplace value of FALSE&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--eGfIHR0z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d2giahfwsnjuzqblec9n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--eGfIHR0z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d2giahfwsnjuzqblec9n.png" alt="Image description" width="378" height="219"&gt;&lt;/a&gt;&lt;br&gt;
inplace=TRUE&lt;br&gt;
df.set_index('states',inplace=TRUE)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--sN1O-VTU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7dso1573kl5du9n8y0rf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--sN1O-VTU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7dso1573kl5du9n8y0rf.png" alt="Image description" width="407" height="219"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Multi index and index hierarchy&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;outside = ['G1','G1','G1','G2','G2','G2']
inside = [1,2,3,1,2,3]
hier_index = list(zip(outside,inside))
hier_index = pd.MultiIndex.from_tuples(hier_index)
hier_index
MultiIndex(levels=[['G1', 'G2'], [1, 2, 3]],
           labels=[[0, 0, 0, 1, 1, 1], [0, 1, 2, 0, 1, 2]])

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;df = pd.DataFrame(np.random.randn(6,2),index=hier_index,columns=['A','B'])&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Yn41KsdJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jes45dm32flkyq19yhdc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Yn41KsdJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jes45dm32flkyq19yhdc.png" alt="Image description" width="248" height="197"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Now let's show how to index this! For index hierarchy we use df.loc[], if this was on the columns axis, you would just use normal bracket notation df[]. Calling one level of the index returns the sub-dataframe:&lt;/em&gt;&lt;br&gt;
df.loc['G1']&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--63rdIjfn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4q6e2cbliz1807gwgbni.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--63rdIjfn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4q6e2cbliz1807gwgbni.png" alt="Image description" width="215" height="127"&gt;&lt;/a&gt;&lt;br&gt;
df.loc['G1'].loc[1]&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--VyG4o4Hk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ebn8l0y3j5p7f9doe4w1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VyG4o4Hk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ebn8l0y3j5p7f9doe4w1.png" alt="Image description" width="196" height="65"&gt;&lt;/a&gt;&lt;br&gt;
df&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fdFcfNox--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cqhyoqt6o72ecc9wpai1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fdFcfNox--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cqhyoqt6o72ecc9wpai1.png" alt="Image description" width="294" height="224"&gt;&lt;/a&gt;&lt;br&gt;
df.xs('G1')&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--y9TABUfD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0pbovo7yjhalhfei565l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--y9TABUfD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0pbovo7yjhalhfei565l.png" alt="Image description" width="237" height="132"&gt;&lt;/a&gt;&lt;br&gt;
df.xs(['G1',1])&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--T7J3yhoz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6dez6993pp9trsms7pjc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--T7J3yhoz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6dez6993pp9trsms7pjc.png" alt="Image description" width="244" height="59"&gt;&lt;/a&gt;&lt;br&gt;
for getting index 1 of both G1 and G2 we have to mention the heading of index box&lt;br&gt;
df.xs(1,level='Num')&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Fd8Ului7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2uryl8gwiecw04jg2ooo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Fd8Ului7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2uryl8gwiecw04jg2ooo.png" alt="Image description" width="230" height="105"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;- Missing Data:&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Let's show a few convenient methods to deal with Missing Data in pandas:&lt;br&gt;
import numpy as np&lt;br&gt;
import pandas as pd&lt;br&gt;
df = pd.DataFrame({'A':[1,2,np.nan],&lt;br&gt;
                  'B':[5,np.nan,np.nan],&lt;br&gt;
                  'C':[1,2,3]})&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Oa__I0P0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y1mpbt0hn2c39o8ax4d8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Oa__I0P0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y1mpbt0hn2c39o8ax4d8.png" alt="Image description" width="156" height="116"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;dropna:&lt;/em&gt;&lt;br&gt;
&lt;em&gt;Sometimes csv file has null values, which are later displayed as NaN in Data Frame. Pandas dropna() method allows the user to analyze and drop Rows/Columns with Null values in different ways.&lt;br&gt;
_&lt;br&gt;
&lt;strong&gt;Syntax - **&lt;/strong&gt;DataFrameName.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)**&lt;br&gt;
&lt;strong&gt;Parameter&lt;/strong&gt;&lt;br&gt;
_axis: axis takes int or string value for rows/columns. Input can be 0 or 1 for Integer and ‘index’ or ‘columns’ for String.&lt;br&gt;
how: how takes string value of two kinds only (‘any’ or ‘all’). ‘any’ drops the row/column if ANY value is Null and ‘all’ drops only if ALL values are null.&lt;br&gt;
thresh: thresh takes integer value which tells minimum amount of na values to drop.&lt;br&gt;
subset: It’s an array which limits the dropping process to passed rows/columns through list.&lt;br&gt;
inplace: It is a boolean which makes the changes in data frame itself if True.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wn6Rh-k8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/npa6dtgd320s1y7q2jii.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wn6Rh-k8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/npa6dtgd320s1y7q2jii.png" alt="Image description" width="176" height="155"&gt;&lt;/a&gt;&lt;br&gt;
df.dropna()&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dtU2PB86--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/poh7lg9chvk0hz0ols3d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dtU2PB86--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/poh7lg9chvk0hz0ols3d.png" alt="Image description" width="126" height="64"&gt;&lt;/a&gt;&lt;br&gt;
df.dropna(axis=1)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9S0PPVSc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6vzq104bmktslqkwjq7t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9S0PPVSc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6vzq104bmktslqkwjq7t.png" alt="Image description" width="62" height="117"&gt;&lt;/a&gt;&lt;br&gt;
df.dropna(thresh=2)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5Oryj7es--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o2cmz87wanwxu95m8m3g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5Oryj7es--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o2cmz87wanwxu95m8m3g.png" alt="Image description" width="165" height="85"&gt;&lt;/a&gt;&lt;br&gt;
it removes the column which has the two NaN value&lt;br&gt;
&lt;strong&gt;fillna&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Sometimes csv file has null values, which are later displayed as NaN in Data Frame. Just like pandas dropna() method manage and remove Null values from a data frame, fillna() manages and let the user replace NaN values with some value of their own.&lt;/em&gt;&lt;br&gt;
**Syntax: DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)&lt;/p&gt;

&lt;p&gt;**&lt;br&gt;
&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;br&gt;
_value : Static, dictionary, array, series or dataframe to fill instead of NaN.&lt;br&gt;
method : Method is used if user doesn’t pass any value. Pandas has different methods like bfill, backfill or ffill which fills the place with value in the Forward index or Previous/Back respectively.&lt;br&gt;
axis: axis takes int or string value for rows/columns. Input can be 0 or 1 for Integer and ‘index’ or ‘columns’ for String&lt;br&gt;
inplace: It is a boolean which makes the changes in data frame itself if True.&lt;br&gt;
limit : This is an integer value which specifies maximum number of consequetive forward/backward NaN value fills.&lt;br&gt;
downcast : It takes a dict which specifies what dtype to downcast to which one. Like Float64 to int64.&lt;br&gt;
**kwargs : Any other Keyword arguments&lt;br&gt;
_&lt;br&gt;
df.fillna(value='FILL VALUE')&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--szc3unJG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/20j0gaj5hh50vrxgldzg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--szc3unJG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/20j0gaj5hh50vrxgldzg.png" alt="Image description" width="244" height="110"&gt;&lt;/a&gt;&lt;br&gt;
df['A'].fillna(value=df['A'].mean())&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qhfKxteG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yglv1k301scfzglhtekx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qhfKxteG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yglv1k301scfzglhtekx.png" alt="Image description" width="198" height="80"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;MERGING,JOINING AND CONACATENATING&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;import pandas as pd&lt;br&gt;
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],&lt;br&gt;
                        'B': ['B0', 'B1', 'B2', 'B3'],&lt;br&gt;
                        'C': ['C0', 'C1', 'C2', 'C3'],&lt;br&gt;
                        'D': ['D0', 'D1', 'D2', 'D3']},&lt;br&gt;
                        index=[0, 1, 2, 3])&lt;br&gt;
df2 = pd.DataFrame({'A': ['A4', 'A5', 'A6', 'A7'],&lt;br&gt;
                        'B': ['B4', 'B5', 'B6', 'B7'],&lt;br&gt;
                        'C': ['C4', 'C5', 'C6', 'C7'],&lt;br&gt;
                        'D': ['D4', 'D5', 'D6', 'D7']},&lt;br&gt;
                         index=[4, 5, 6, 7]) &lt;br&gt;
df3 = pd.DataFrame({'A': ['A8', 'A9', 'A10', 'A11'],&lt;br&gt;
                        'B': ['B8', 'B9', 'B10', 'B11'],&lt;br&gt;
                        'C': ['C8', 'C9', 'C10', 'C11'],&lt;br&gt;
                        'D': ['D8', 'D9', 'D10', 'D11']},&lt;br&gt;
                        index=[8, 9, 10, 11])&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--sNSS77fs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d39gmutrv1n1jf4r8wv3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--sNSS77fs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d39gmutrv1n1jf4r8wv3.png" alt="Image description" width="191" height="168"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XiElvPbc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3wcnmfoha7snd77ftvv1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XiElvPbc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3wcnmfoha7snd77ftvv1.png" alt="Image description" width="188" height="192"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--W9gPdYIx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3vw0xkdzmdgwgqjaov3u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--W9gPdYIx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3vw0xkdzmdgwgqjaov3u.png" alt="Image description" width="213" height="191"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Concatenation&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Concatenation basically glues together DataFrames. Keep in mind that dimensions should match along the axis you are concatenating on. You can use pd.concat and pass in a list of DataFrames to concatenate together&lt;/em&gt;&lt;br&gt;
&lt;em&gt;pandas.concat() function does all the heavy lifting of performing concatenation operations along with an axis od Pandas objects while performing optional set logic (union or intersection) of the indexes (if any) on the other axes.&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;Syntax: concat(objs, axis, join, ignore_index, keys, levels, names, verify_integrity, sort, copy)&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;objs: Series or DataFrame objects&lt;br&gt;
axis: axis to concatenate along; default = 0&lt;br&gt;
join: way to handle indexes on other axis; default = ‘outer’&lt;br&gt;
ignore_index: if True, do not use the index values along the concatenation axis; default = False&lt;br&gt;
keys: sequence to add an identifier to the result indexes; default = None&lt;br&gt;
levels: specific levels (unique values) to use for constructing a MultiIndex; default = None&lt;br&gt;
names: names for the levels in the resulting hierarchical index; default = None&lt;br&gt;
verify_integrity: check whether the new concatenated axis contains duplicates; default = False&lt;br&gt;
sort: sort non-concatenation axis if it is not already aligned when join is ‘outer’; default = False&lt;br&gt;
copy: if False, do not copy data unnecessarily; default = True&lt;/em&gt;&lt;br&gt;
pd.concat([df1,df2,df3])&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vueaDt52--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gj90un4bokxaoh1fo4ig.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vueaDt52--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gj90un4bokxaoh1fo4ig.png" alt="Image description" width="230" height="346"&gt;&lt;/a&gt;&lt;br&gt;
pd.concat([df1,df2,df3],axis=1&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qbpnZa13--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4cig7gyuimn1du3l81sg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qbpnZa13--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4cig7gyuimn1du3l81sg.png" alt="Image description" width="554" height="382"&gt;&lt;/a&gt;&lt;br&gt;
left = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],&lt;br&gt;
                     'A': ['A0', 'A1', 'A2', 'A3'],&lt;br&gt;
                     'B': ['B0', 'B1', 'B2', 'B3']})&lt;/p&gt;

&lt;p&gt;right = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],&lt;br&gt;
                          'C': ['C0', 'C1', 'C2', 'C3'],&lt;br&gt;
                          'D': ['D0', 'D1', 'D2', 'D3']})    &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4gAvslZ8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1avnyqux9k0029s8ee23.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4gAvslZ8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1avnyqux9k0029s8ee23.png" alt="Image description" width="148" height="175"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--IpANumJv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fdzyjphimxz9ygjggsfm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IpANumJv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fdzyjphimxz9ygjggsfm.png" alt="Image description" width="169" height="174"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;MERGING&lt;/strong&gt;&lt;br&gt;
The merge function allows you to merge DataFrames together using a similar logic as merging SQL Tables together. For example:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xT8IZUm2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r6f580zilpo7wu2qkiw9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xT8IZUm2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r6f580zilpo7wu2qkiw9.png" alt="Image description" width="216" height="147"&gt;&lt;/a&gt;&lt;br&gt;
left = pd.DataFrame({'key1': ['K0', 'K0', 'K1', 'K2'],&lt;br&gt;
                     'key2': ['K0', 'K1', 'K0', 'K1'],&lt;br&gt;
                        'A': ['A0', 'A1', 'A2', 'A3'],&lt;br&gt;
                        'B': ['B0', 'B1', 'B2', 'B3']})&lt;/p&gt;

&lt;p&gt;right = pd.DataFrame({'key1': ['K0', 'K1', 'K1', 'K2'],&lt;br&gt;
                               'key2': ['K0', 'K0', 'K0', 'K0'],&lt;br&gt;
                                  'C': ['C0', 'C1', 'C2', 'C3'],&lt;br&gt;
                                  'D': ['D0', 'D1', 'D2', 'D3']})&lt;br&gt;
pd.merge(left, right, on=['key1', 'key2'])&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Zu6If96w--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2huop524jjmx737mm9i5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Zu6If96w--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2huop524jjmx737mm9i5.png" alt="Image description" width="267" height="116"&gt;&lt;/a&gt;&lt;br&gt;
pd.merge(left, right, how='outer', on=['key1', 'key2'])&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lt06_zDN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tpgfkzpduqf61qygz4cj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lt06_zDN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tpgfkzpduqf61qygz4cj.png" alt="Image description" width="290" height="180"&gt;&lt;/a&gt;&lt;br&gt;
pd.merge(left, right, how='right', on=['key1', 'key2'])&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YyvH1UfV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9leh23o0s1ynf089uvq2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YyvH1UfV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9leh23o0s1ynf089uvq2.png" alt="Image description" width="271" height="176"&gt;&lt;/a&gt;&lt;br&gt;
pd.merge(left, right, how='left', on=['key1', 'key2'])&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;JOINING&lt;/strong&gt;&lt;br&gt;
-&lt;em&gt;Joining is a convenient method for combining the columns of two potentially differently-indexed DataFrames into a single result DataFrame.&lt;/em&gt;&lt;br&gt;
left = pd.DataFrame({'A': ['A0', 'A1', 'A2'],&lt;br&gt;
                     'B': ['B0', 'B1', 'B2']},&lt;br&gt;
                      index=['K0', 'K1', 'K2']) &lt;/p&gt;

&lt;p&gt;right = pd.DataFrame({'C': ['C0', 'C2', 'C3'],&lt;br&gt;
                    'D': ['D0', 'D2', 'D3']},&lt;br&gt;
                      index=['K0', 'K2', 'K3'])&lt;br&gt;
left.join(right)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lzds9c-m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s432gq79yodwx9hj3r3e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lzds9c-m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s432gq79yodwx9hj3r3e.png" alt="Image description" width="205" height="116"&gt;&lt;/a&gt;&lt;br&gt;
left.join(right, how='outer')&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HDEHIAYc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/guy2zvgchueu9mmicxqm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HDEHIAYc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/guy2zvgchueu9mmicxqm.png" alt="Image description" width="201" height="139"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;OPERATION&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;There are lots of operations with pandas that will be really useful to you, but don't fall into any distinct category&lt;/em&gt;&lt;br&gt;
import pandas as pd&lt;br&gt;
df = pd.DataFrame({'col1':[1,2,3,4],'col2':[444,555,666,444],'col3':['abc','def','ghi','xyz']})&lt;br&gt;
df.head()&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZKyM4m9X--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bwwkga14ewq8amhfon57.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZKyM4m9X--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bwwkga14ewq8amhfon57.png" alt="Image description" width="151" height="130"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Info on Unique Values:&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;The unique function in pandas is used to find the unique values from a series. A series is a single column of a data frame. We can use the unique function on any possible set of elements in Python. It can be used on a series of strings, integers, tuples, or mixed elements.&lt;/em&gt;&lt;br&gt;
df['col2'].unique()&lt;br&gt;
output: array([444, 555, 666])&lt;br&gt;
&lt;strong&gt;pandas.DataFrame.nunique&lt;/strong&gt;&lt;br&gt;
_DataFrame.nunique(axis=0, dropna=True)[source]&lt;br&gt;
Count number of distinct elements in specified axis.&lt;/p&gt;

&lt;p&gt;Return Series with number of distinct elements. Can ignore NaN values.&lt;/p&gt;

&lt;p&gt;Parameters&lt;br&gt;
axis{0 or ‘index’, 1 or ‘columns’}, default 0&lt;br&gt;
The axis to use. 0 or ‘index’ for row-wise, 1 or ‘columns’ for column-wise.&lt;/p&gt;

&lt;p&gt;dropnabool, default True&lt;br&gt;
Don’t include NaN in the counts._&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pxP-dnCm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8y19mrdgdkevgqwvrbib.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pxP-dnCm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8y19mrdgdkevgqwvrbib.png" alt="Image description" width="220" height="73"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YcHcEURW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ea6p2f91nrmp1jb3yr30.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YcHcEURW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ea6p2f91nrmp1jb3yr30.png" alt="Image description" width="252" height="139"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;SELECTING DATA&lt;/strong&gt;&lt;br&gt;
newdf = df[(df['col1']&amp;gt;2) &amp;amp; (df['col2']==444)]&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--VgLsXl_f--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lza6urm4lc3q1mcrn2q7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VgLsXl_f--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lza6urm4lc3q1mcrn2q7.png" alt="Image description" width="209" height="101"&gt;&lt;/a&gt;&lt;br&gt;
*it will count the row which fulfills the above criteria&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TvWcWGS9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s110erf0q76j5dzdbze2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TvWcWGS9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s110erf0q76j5dzdbze2.png" alt="Image description" width="419" height="147"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Applying function&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;def times2(x):&lt;br&gt;
    return x*2&lt;br&gt;
df['col1'].apply(times2)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KsSK1r6y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4fmt3a4slxu8lnhf2ro6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KsSK1r6y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4fmt3a4slxu8lnhf2ro6.png" alt="Image description" width="232" height="92"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rHhCySXk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ulaycghhlng989uo6cyh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rHhCySXk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ulaycghhlng989uo6cyh.png" alt="Image description" width="278" height="216"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Permanently Removing a Column&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
del df['col1']&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1A1Y6nXT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6siphh0o52208coxm3ug.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1A1Y6nXT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6siphh0o52208coxm3ug.png" alt="Image description" width="173" height="185"&gt;&lt;/a&gt;&lt;br&gt;
** Get column and index names: **&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kq1EoyjN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n7496mjukm87ao6lnhom.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kq1EoyjN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n7496mjukm87ao6lnhom.png" alt="Image description" width="344" height="143"&gt;&lt;/a&gt;&lt;br&gt;
** Sorting and Ordering a DataFrame:**&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WdMEuGbq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zrrouf0amlu6l4l4s622.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WdMEuGbq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zrrouf0amlu6l4l4s622.png" alt="Image description" width="464" height="372"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;** Find Null Values or Check for Null Values**&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qM4FLGGh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/eydp2vie5rew7d8hil33.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qM4FLGGh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/eydp2vie5rew7d8hil33.png" alt="Image description" width="168" height="169"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--etxqV3fm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w69y9jpw6ij6zeh9n6tt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--etxqV3fm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w69y9jpw6ij6zeh9n6tt.png" alt="Image description" width="237" height="184"&gt;&lt;/a&gt;&lt;br&gt;
** Filling in NaN values with something else: **&lt;br&gt;
import numpy as np&lt;br&gt;
df = pd.DataFrame({'col1':[1,2,3,np.nan],&lt;br&gt;
                   'col2':[np.nan,555,666,444],&lt;br&gt;
                   'col3':['abc','def','ghi','xyz']})&lt;br&gt;
df.head()&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Sz9BXOfC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9jayshktkzib3apk9fyy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Sz9BXOfC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9jayshktkzib3apk9fyy.png" alt="Image description" width="187" height="141"&gt;&lt;/a&gt;&lt;br&gt;
df.fillna('FILL')&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--F89TQ1VK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g7wrr24ep2s2wsd5udki.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--F89TQ1VK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g7wrr24ep2s2wsd5udki.png" alt="Image description" width="167" height="138"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;data = {'A':['foo','foo','foo','bar','bar','bar'],&lt;br&gt;
     'B':['one','one','two','two','one','one'],&lt;br&gt;
       'C':['x','y','x','y','x','y'],&lt;br&gt;
       'D':[1,3,2,5,4,1]}&lt;/p&gt;

&lt;p&gt;df = pd.DataFrame(data)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--blCHZUz9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0121ia9i5wnnzuqizqlp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--blCHZUz9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0121ia9i5wnnzuqizqlp.png" alt="Image description" width="185" height="224"&gt;&lt;/a&gt;&lt;br&gt;
PIVOT_TABLE:&lt;br&gt;
pandas.pivot_table(data, values=None, index=None, columns=None, aggfunc=’mean’, fill_value=None, margins=False, dropna=True, margins_name=’All’) &lt;br&gt;
&lt;strong&gt;PARAMETERS&lt;/strong&gt;&lt;br&gt;
data : DataFrame&lt;br&gt;
values : column to aggregate, optional&lt;br&gt;
index: column, Grouper, array, or list of the previous&lt;br&gt;
columns: column, Grouper, array, or list of the previous&lt;/p&gt;

&lt;p&gt;aggfunc: function, list of functions, dict, default numpy.mean&lt;br&gt;
-&amp;gt; If list of functions passed, the resulting pivot table will have hierarchical columns whose top level are the function names.&lt;br&gt;
-&amp;gt; If dict is passed, the key is column to aggregate and value is function or list of functions&lt;/p&gt;

&lt;p&gt;fill_value[scalar, default None] : Value to replace missing values with&lt;br&gt;
margins[boolean, default False] : Add all row / columns (e.g. for subtotal / grand totals)&lt;br&gt;
dropna[boolean, default True] : Do not include columns whose entries are all NaN&lt;br&gt;
margins_name[string, default ‘All’] : Name of the row / column that will contain the totals when margins is True.&lt;/p&gt;

&lt;p&gt;Returns: DataFrame&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--macmNoGX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vqr827vnml0wyq65pxv9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--macmNoGX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vqr827vnml0wyq65pxv9.png" alt="Image description" width="481" height="213"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;DATA INPUT AND OUTPUT&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;CSV&lt;/strong&gt;&lt;br&gt;
_A simple way to store big data sets is to use CSV files (comma separated files).&lt;/p&gt;

&lt;p&gt;CSV files contains plain text and is a well know format that can be read by everyone including Pandas._&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--H-mCjoS8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/30pn4b842byzotl68waw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--H-mCjoS8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/30pn4b842byzotl68waw.png" alt="Image description" width="379" height="342"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;EXCEL&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Pandas can read and write excel files, keep in mind, this only imports data. Not formulas or images, having images or macros may cause this read_excel method to crash.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NLwt0kSS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ica249l0zk350pr138av.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NLwt0kSS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ica249l0zk350pr138av.png" alt="Image description" width="484" height="292"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>pandas</category>
      <category>beginners</category>
      <category>python</category>
    </item>
    <item>
      <title>Python for data analysis- NumPy (Based on udemy)</title>
      <dc:creator>IftakharRahat</dc:creator>
      <pubDate>Mon, 19 Sep 2022 16:11:56 +0000</pubDate>
      <link>https://dev.to/iftakharrahat/python-for-data-analysis-numpy-based-on-udemy-36b0</link>
      <guid>https://dev.to/iftakharrahat/python-for-data-analysis-numpy-based-on-udemy-36b0</guid>
      <description>&lt;p&gt;&lt;strong&gt;What is Numpy?&lt;/strong&gt;&lt;br&gt;
-NumPy (or Numpy) is a Linear Algebra Library for Python, the reason it is so important for Data Science with Python is that almost all of the libraries in the PyData Ecosystem rely on NumPy as one of their main building blocks.&lt;br&gt;
Using NumPy&lt;br&gt;
Once you've installed NumPy you can import it as a library:&lt;/p&gt;

&lt;p&gt;import numpy as np&lt;br&gt;
Numpy has many built-in functions and capabilities. We won't cover them all but instead we will focus on some of the most important aspects of Numpy: vectors,arrays,matrices, and number generation. Let's start by discussing arrays.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1.Numpy Arrays&lt;/strong&gt;&lt;br&gt;
NumPy arrays are the main way we will use Numpy throughout the course. Numpy arrays essentially come in two flavors: vectors and matrices. Vectors are strictly 1-d arrays and matrices are 2-d (but you should note a matrix can still have only one row or one column).&lt;/p&gt;

&lt;p&gt;Let's begin our introduction by exploring how to create NumPy arrays.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Creating NumPy Arrays&lt;/strong&gt;&lt;br&gt;
From a Python List&lt;br&gt;
We can create an array by directly converting a list or list of lists:&lt;/p&gt;

&lt;p&gt;my_list = [1,2,3]&lt;br&gt;
my_list&lt;br&gt;
[1, 2, 3]&lt;br&gt;
np.array(my_list)&lt;br&gt;
array([1, 2, 3])&lt;br&gt;
my_matrix = [[1,2,3],[4,5,6],[7,8,9]]&lt;br&gt;
my_matrix&lt;br&gt;
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]&lt;br&gt;
np.array(my_matrix)&lt;br&gt;
array([[1, 2, 3],&lt;br&gt;
       [4, 5, 6],&lt;br&gt;
       [7, 8, 9]])&lt;br&gt;
Built-in Methods&lt;br&gt;
There are lots of built-in ways to generate Arrays&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;arange&lt;/strong&gt;&lt;br&gt;
Return evenly spaced values within a given interval.&lt;/p&gt;

&lt;p&gt;np.arange(0,10)&lt;br&gt;
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])&lt;br&gt;
np.arange(0,11,2)&lt;br&gt;
array([ 0,  2,  4,  6,  8, 10])&lt;br&gt;
&lt;strong&gt;zeros and ones&lt;/strong&gt;&lt;br&gt;
Generate arrays of zeros or ones&lt;/p&gt;

&lt;p&gt;np.zeros(3)&lt;br&gt;
array([ 0.,  0.,  0.])&lt;br&gt;
np.zeros((5,5))&lt;br&gt;
array([[ 0.,  0.,  0.,  0.,  0.],&lt;br&gt;
       [ 0.,  0.,  0.,  0.,  0.],&lt;br&gt;
       [ 0.,  0.,  0.,  0.,  0.],&lt;br&gt;
       [ 0.,  0.,  0.,  0.,  0.],&lt;br&gt;
       [ 0.,  0.,  0.,  0.,  0.]])&lt;br&gt;
np.ones(3)&lt;br&gt;
array([ 1.,  1.,  1.])&lt;br&gt;
np.ones((3,3))&lt;br&gt;
array([[ 1.,  1.,  1.],&lt;br&gt;
       [ 1.,  1.,  1.],&lt;br&gt;
       [ 1.,  1.,  1.]])&lt;br&gt;
&lt;strong&gt;linspace&lt;/strong&gt;&lt;br&gt;
Return evenly spaced numbers over a specified interval.&lt;/p&gt;

&lt;p&gt;np.linspace(0,10,3)&lt;br&gt;
array([  0.,   5.,  10.])&lt;br&gt;
np.linspace(0,10,50)&lt;br&gt;
array([  0.        ,   0.20408163,   0.40816327,   0.6122449 ,&lt;br&gt;
         0.81632653,   1.02040816,   1.2244898 ,   1.42857143,&lt;br&gt;
         1.63265306,   1.83673469,   2.04081633,   2.24489796,&lt;br&gt;
         2.44897959,   2.65306122,   2.85714286,   3.06122449,&lt;br&gt;
         3.26530612,   3.46938776,   3.67346939,   3.87755102,&lt;br&gt;
         4.08163265,   4.28571429,   4.48979592,   4.69387755,&lt;br&gt;
         4.89795918,   5.10204082,   5.30612245,   5.51020408,&lt;br&gt;
         5.71428571,   5.91836735,   6.12244898,   6.32653061,&lt;br&gt;
         6.53061224,   6.73469388,   6.93877551,   7.14285714,&lt;br&gt;
         7.34693878,   7.55102041,   7.75510204,   7.95918367,&lt;br&gt;
         8.16326531,   8.36734694,   8.57142857,   8.7755102 ,&lt;br&gt;
         8.97959184,   9.18367347,   9.3877551 ,   9.59183673,&lt;br&gt;
         9.79591837,  10.        ])&lt;br&gt;
&lt;strong&gt;eye&lt;/strong&gt;&lt;br&gt;
Creates an identity matrix&lt;/p&gt;

&lt;p&gt;np.eye(4)&lt;br&gt;
array([[ 1.,  0.,  0.,  0.],&lt;br&gt;
       [ 0.,  1.,  0.,  0.],&lt;br&gt;
       [ 0.,  0.,  1.,  0.],&lt;br&gt;
       [ 0.,  0.,  0.,  1.]])&lt;br&gt;
&lt;strong&gt;Random&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Numpy also has lots of ways to create random number arrays:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;rand&lt;/strong&gt;&lt;br&gt;
Create an array of the given shape and populate it with random samples from a uniform distribution over [0, 1).&lt;/p&gt;

&lt;p&gt;np.random.rand(2)&lt;br&gt;
array([ 0.11570539,  0.35279769])&lt;br&gt;
np.random.rand(5,5)&lt;br&gt;
array([[ 0.66660768,  0.87589888,  0.12421056,  0.65074126,  0.60260888],&lt;br&gt;
       [ 0.70027668,  0.85572434,  0.8464595 ,  0.2735416 ,  0.10955384],&lt;br&gt;
       [ 0.0670566 ,  0.83267738,  0.9082729 ,  0.58249129,  0.12305748],&lt;br&gt;
       [ 0.27948423,  0.66422017,  0.95639833,  0.34238788,  0.9578872 ],&lt;br&gt;
       [ 0.72155386,  0.3035422 ,  0.85249683,  0.30414307,  0.79718816]])&lt;br&gt;
&lt;strong&gt;randn&lt;/strong&gt;&lt;br&gt;
Return a sample (or samples) from the "standard normal" distribution. Unlike rand which is uniform:&lt;/p&gt;

&lt;p&gt;np.random.randn(2)&lt;br&gt;
array([-0.27954018,  0.90078368])&lt;br&gt;
np.random.randn(5,5)&lt;br&gt;
array([[ 0.70154515,  0.22441999,  1.33563186,  0.82872577, -0.28247509],&lt;br&gt;
       [ 0.64489788,  0.61815094, -0.81693168, -0.30102424, -0.29030574],&lt;br&gt;
       [ 0.8695976 ,  0.413755  ,  2.20047208,  0.17955692, -0.82159344],&lt;br&gt;
       [ 0.59264235,  1.29869894, -1.18870241,  0.11590888, -0.09181687],&lt;br&gt;
       [-0.96924265, -1.62888685, -2.05787102, -0.29705576,  0.68915542]])&lt;br&gt;
&lt;strong&gt;randint&lt;/strong&gt;&lt;br&gt;
Return random integers from low (inclusive) to high (exclusive).&lt;/p&gt;

&lt;p&gt;np.random.randint(1,100)&lt;br&gt;
44&lt;br&gt;
np.random.randint(1,100,10)&lt;br&gt;
array([13, 64, 27, 63, 46, 68, 92, 10, 58, 24])&lt;br&gt;
Array Attributes and Methods&lt;br&gt;
Let's discuss some useful attributes and methods or an array:&lt;/p&gt;

&lt;p&gt;arr = np.arange(25)&lt;br&gt;
ranarr = np.random.randint(0,50,10)&lt;br&gt;
arr&lt;br&gt;
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,&lt;br&gt;
       17, 18, 19, 20, 21, 22, 23, 24])&lt;br&gt;
&lt;strong&gt;ranarr&lt;/strong&gt;&lt;br&gt;
array([10, 12, 41, 17, 49,  2, 46,  3, 19, 39])&lt;br&gt;
&lt;strong&gt;Reshape&lt;/strong&gt;&lt;br&gt;
Returns an array containing the same data with a new shape.&lt;/p&gt;

&lt;p&gt;arr.reshape(5,5)&lt;br&gt;
array([[ 0,  1,  2,  3,  4],&lt;br&gt;
       [ 5,  6,  7,  8,  9],&lt;br&gt;
       [10, 11, 12, 13, 14],&lt;br&gt;
       [15, 16, 17, 18, 19],&lt;br&gt;
       [20, 21, 22, 23, 24]])&lt;br&gt;
&lt;strong&gt;max,min,argmax,argmin&lt;/strong&gt;&lt;br&gt;
These are useful methods for finding max or min values. Or to find their index locations using argmin or argmax&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ranarr&lt;/strong&gt;&lt;br&gt;
array([10, 12, 41, 17, 49,  2, 46,  3, 19, 39])&lt;br&gt;
ranarr.max()&lt;br&gt;
49&lt;br&gt;
ranarr.argmax()&lt;br&gt;
4&lt;br&gt;
ranarr.min()&lt;br&gt;
2&lt;br&gt;
ranarr.argmin()&lt;br&gt;
5&lt;br&gt;
&lt;strong&gt;Shape&lt;/strong&gt;&lt;br&gt;
Shape is an attribute that arrays have (not a method):&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;# Vector&lt;/strong&gt;&lt;br&gt;
arr.shape&lt;br&gt;
(25,)&lt;/p&gt;

&lt;h1&gt;
  
  
  Notice the two sets of brackets
&lt;/h1&gt;

&lt;p&gt;arr.reshape(1,25)&lt;br&gt;
array([[ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,&lt;br&gt;
        17, 18, 19, 20, 21, 22, 23, 24]])&lt;br&gt;
arr.reshape(1,25).shape&lt;br&gt;
(1, 25)&lt;br&gt;
arr.reshape(25,1)&lt;br&gt;
array([[ 0],&lt;br&gt;
       [ 1],&lt;br&gt;
       [ 2],&lt;br&gt;
       [ 3],&lt;br&gt;
       [ 4],&lt;br&gt;
       [ 5],&lt;br&gt;
       [ 6],&lt;br&gt;
       [ 7],&lt;br&gt;
       [ 8],&lt;br&gt;
       [ 9],&lt;br&gt;
       [10],&lt;br&gt;
       [11],&lt;br&gt;
       [12],&lt;br&gt;
       [13],&lt;br&gt;
       [14],&lt;br&gt;
       [15],&lt;br&gt;
       [16],&lt;br&gt;
       [17],&lt;br&gt;
       [18],&lt;br&gt;
       [19],&lt;br&gt;
       [20],&lt;br&gt;
       [21],&lt;br&gt;
       [22],&lt;br&gt;
       [23],&lt;br&gt;
       [24]])&lt;br&gt;
arr.reshape(25,1).shape&lt;br&gt;
(25, 1)&lt;br&gt;
&lt;strong&gt;dtype&lt;/strong&gt;&lt;br&gt;
You can also grab the data type of the object in the array:&lt;/p&gt;

&lt;p&gt;arr.dtype&lt;br&gt;
dtype('int64')&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. NumPy array indexing and selection&lt;/strong&gt;&lt;br&gt;
NumPy Indexing and Selection&lt;br&gt;
In this lecture we will discuss how to select elements or groups of elements from an array.&lt;/p&gt;

&lt;p&gt;import numpy as np&lt;/p&gt;

&lt;h1&gt;
  
  
  Creating sample array
&lt;/h1&gt;

&lt;p&gt;arr = np.arange(0,11)&lt;/p&gt;

&lt;h1&gt;
  
  
  Show
&lt;/h1&gt;

&lt;p&gt;arr&lt;br&gt;
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10])&lt;br&gt;
Bracket Indexing and Selection&lt;br&gt;
The simplest way to pick one or some elements of an array looks very similar to python lists:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;#Get a value at an index&lt;/strong&gt;&lt;br&gt;
arr[8]&lt;br&gt;
8&lt;/p&gt;

&lt;h1&gt;
  
  
  Get values in a range
&lt;/h1&gt;

&lt;p&gt;arr[1:5]&lt;br&gt;
array([1, 2, 3, 4])&lt;/p&gt;

&lt;h1&gt;
  
  
  Get values in a range
&lt;/h1&gt;

&lt;p&gt;arr[0:5]&lt;br&gt;
array([0, 1, 2, 3, 4])&lt;br&gt;
Broadcasting&lt;br&gt;
&lt;em&gt;Numpy arrays differ from a normal Python list because of their ability to broadcast:&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Setting a value with index range (Broadcasting)
&lt;/h1&gt;

&lt;p&gt;arr[0:5]=100&lt;br&gt;
​&lt;/p&gt;

&lt;h1&gt;
  
  
  Show
&lt;/h1&gt;

&lt;p&gt;arr&lt;br&gt;
array([100, 100, 100, 100, 100,   5,   6,   7,   8,   9,  10])&lt;/p&gt;

&lt;h1&gt;
  
  
  Reset array, we'll see why I had to reset in  a moment
&lt;/h1&gt;

&lt;p&gt;arr = np.arange(0,11)&lt;br&gt;
​&lt;/p&gt;

&lt;h1&gt;
  
  
  Show
&lt;/h1&gt;

&lt;p&gt;arr&lt;br&gt;
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10])&lt;/p&gt;

&lt;h1&gt;
  
  
  Important notes on Slices
&lt;/h1&gt;

&lt;p&gt;slice_of_arr = arr[0:6]&lt;br&gt;
​&lt;/p&gt;

&lt;h1&gt;
  
  
  Show slice
&lt;/h1&gt;

&lt;p&gt;slice_of_arr&lt;br&gt;
array([0, 1, 2, 3, 4, 5])&lt;/p&gt;

&lt;h1&gt;
  
  
  Change Slice
&lt;/h1&gt;

&lt;p&gt;slice_of_arr[:]=99&lt;br&gt;
​&lt;/p&gt;

&lt;h1&gt;
  
  
  Show Slice again
&lt;/h1&gt;

&lt;p&gt;slice_of_arr&lt;br&gt;
array([99, 99, 99, 99, 99, 99])&lt;br&gt;
Now note the changes also occur in our original array!&lt;/p&gt;

&lt;p&gt;arr&lt;br&gt;
array([99, 99, 99, 99, 99, 99,  6,  7,  8,  9, 10])&lt;br&gt;
Data is not copied, it's a view of the original array! This avoids memory problems!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;#To get a copy, need to be explicit&lt;/em&gt;&lt;br&gt;
arr_copy = arr.copy()&lt;br&gt;
​&lt;br&gt;
arr_copy&lt;br&gt;
array([99, 99, 99, 99, 99, 99,  6,  7,  8,  9, 10])&lt;br&gt;
Indexing a 2D array (matrices)&lt;br&gt;
The general format is arr_2d[row][col] or arr_2d[row,col]. I recommend usually using the comma notation for clarity.&lt;/p&gt;

&lt;p&gt;arr_2d = np.array(([5,10,15],[20,25,30],[35,40,45]))&lt;br&gt;
​&lt;/p&gt;

&lt;h1&gt;
  
  
  Show
&lt;/h1&gt;

&lt;p&gt;arr_2d&lt;br&gt;
array([[ 5, 10, 15],&lt;br&gt;
       [20, 25, 30],&lt;br&gt;
       [35, 40, 45]])&lt;/p&gt;

&lt;h1&gt;
  
  
  Indexing row
&lt;/h1&gt;

&lt;p&gt;arr_2d[1]&lt;br&gt;
​&lt;br&gt;
array([20, 25, 30])&lt;/p&gt;

&lt;h1&gt;
  
  
  Format is arr_2d[row][col] or arr_2d[row,col]
&lt;/h1&gt;

&lt;p&gt;​&lt;/p&gt;

&lt;h1&gt;
  
  
  Getting individual element value
&lt;/h1&gt;

&lt;p&gt;arr_2d[1][0]&lt;br&gt;
20&lt;/p&gt;

&lt;h1&gt;
  
  
  Getting individual element value
&lt;/h1&gt;

&lt;p&gt;arr_2d[1,0]&lt;br&gt;
20&lt;/p&gt;

&lt;h1&gt;
  
  
  2D array slicing
&lt;/h1&gt;

&lt;p&gt;​&lt;/p&gt;

&lt;h1&gt;
  
  
  Shape (2,2) from top right corner
&lt;/h1&gt;

&lt;p&gt;arr_2d[:2,1:]&lt;br&gt;
array([[10, 15],&lt;br&gt;
       [25, 30]])&lt;/p&gt;

&lt;h1&gt;
  
  
  Shape bottom row
&lt;/h1&gt;

&lt;p&gt;arr_2d[2]&lt;br&gt;
array([35, 40, 45])&lt;/p&gt;

&lt;h1&gt;
  
  
  Shape bottom row
&lt;/h1&gt;

&lt;p&gt;arr_2d[2,:]&lt;br&gt;
array([35, 40, 45])&lt;br&gt;
_Fancy Indexing&lt;br&gt;
Fancy indexing allows you to select entire rows or columns out of order,to show this, let's quickly build out a numpy array:&lt;br&gt;
_&lt;/p&gt;

&lt;h1&gt;
  
  
  Set up matrix
&lt;/h1&gt;

&lt;p&gt;arr2d = np.zeros((10,10))&lt;/p&gt;

&lt;h1&gt;
  
  
  Length of array
&lt;/h1&gt;

&lt;p&gt;arr_length = arr2d.shape[1]&lt;/p&gt;

&lt;h1&gt;
  
  
  Set up array
&lt;/h1&gt;

&lt;p&gt;​&lt;br&gt;
for i in range(arr_length):&lt;br&gt;
    arr2d[i] = i&lt;/p&gt;

&lt;p&gt;arr2d&lt;br&gt;
array([[ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],&lt;br&gt;
       [ 1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.],&lt;br&gt;
       [ 2.,  2.,  2.,  2.,  2.,  2.,  2.,  2.,  2.,  2.],&lt;br&gt;
       [ 3.,  3.,  3.,  3.,  3.,  3.,  3.,  3.,  3.,  3.],&lt;br&gt;
       [ 4.,  4.,  4.,  4.,  4.,  4.,  4.,  4.,  4.,  4.],&lt;br&gt;
       [ 5.,  5.,  5.,  5.,  5.,  5.,  5.,  5.,  5.,  5.],&lt;br&gt;
       [ 6.,  6.,  6.,  6.,  6.,  6.,  6.,  6.,  6.,  6.],&lt;br&gt;
       [ 7.,  7.,  7.,  7.,  7.,  7.,  7.,  7.,  7.,  7.],&lt;br&gt;
       [ 8.,  8.,  8.,  8.,  8.,  8.,  8.,  8.,  8.,  8.],&lt;br&gt;
       [ 9.,  9.,  9.,  9.,  9.,  9.,  9.,  9.,  9.,  9.]])&lt;br&gt;
Fancy indexing allows the following&lt;/p&gt;

&lt;p&gt;arr2d[[2,4,6,8]]&lt;br&gt;
array([[ 2.,  2.,  2.,  2.,  2.,  2.,  2.,  2.,  2.,  2.],&lt;br&gt;
       [ 4.,  4.,  4.,  4.,  4.,  4.,  4.,  4.,  4.,  4.],&lt;br&gt;
       [ 6.,  6.,  6.,  6.,  6.,  6.,  6.,  6.,  6.,  6.],&lt;br&gt;
       [ 8.,  8.,  8.,  8.,  8.,  8.,  8.,  8.,  8.,  8.]])&lt;/p&gt;

&lt;h1&gt;
  
  
  Allows in any order
&lt;/h1&gt;

&lt;p&gt;arr2d[[6,4,2,7]]&lt;br&gt;
array([[ 6.,  6.,  6.,  6.,  6.,  6.,  6.,  6.,  6.,  6.],&lt;br&gt;
       [ 4.,  4.,  4.,  4.,  4.,  4.,  4.,  4.,  4.,  4.],&lt;br&gt;
       [ 2.,  2.,  2.,  2.,  2.,  2.,  2.,  2.,  2.,  2.],&lt;br&gt;
       [ 7.,  7.,  7.,  7.,  7.,  7.,  7.,  7.,  7.,  7.]])&lt;br&gt;
More Indexing Help&lt;br&gt;
_Indexing a 2d matrix can be a bit confusing at first, especially when you start to add in step size. Try google image searching NumPy indexing to fins useful images, like this one:&lt;br&gt;
_&lt;/p&gt;

&lt;p&gt;_&lt;strong&gt;Selection&lt;/strong&gt;&lt;br&gt;
Let's briefly go over how to use brackets for selection based off of comparison operators.&lt;br&gt;
_&lt;br&gt;
arr = np.arange(1,11)&lt;br&gt;
arr&lt;br&gt;
array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10])&lt;br&gt;
arr &amp;gt; 4&lt;br&gt;
array([False, False, False, False,  True,  True,  True,  True,  True,  True], dtype=bool)&lt;br&gt;
bool_arr = arr&amp;gt;4&lt;br&gt;
bool_arr&lt;br&gt;
array([False, False, False, False,  True,  True,  True,  True,  True,  True], dtype=bool)&lt;br&gt;
arr[bool_arr]&lt;br&gt;
array([ 5,  6,  7,  8,  9, 10])&lt;br&gt;
arr[arr&amp;gt;2]&lt;br&gt;
array([ 3,  4,  5,  6,  7,  8,  9, 10])&lt;br&gt;
x = 2&lt;br&gt;
arr[arr&amp;gt;x]&lt;br&gt;
array([ 3,  4,  5,  6,  7,  8,  9, 10])&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3.NumPy Operations&lt;/strong&gt;&lt;br&gt;
Arithmetic&lt;br&gt;
You can easily perform array with array arithmetic, or scalar with array arithmetic. Let's see some examples:&lt;/p&gt;

&lt;p&gt;import numpy as np&lt;br&gt;
arr = np.arange(0,10)&lt;br&gt;
arr + arr&lt;br&gt;
array([ 0,  2,  4,  6,  8, 10, 12, 14, 16, 18])&lt;br&gt;
arr * arr&lt;br&gt;
array([ 0,  1,  4,  9, 16, 25, 36, 49, 64, 81])&lt;br&gt;
arr - arr&lt;br&gt;
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])&lt;/p&gt;

&lt;h1&gt;
  
  
  Warning on division by zero, but not an error!
&lt;/h1&gt;

&lt;h1&gt;
  
  
  Just replaced with nan
&lt;/h1&gt;

&lt;p&gt;arr/arr&lt;br&gt;
/Users/marci/anaconda/lib/python3.5/site-packages/ipykernel/&lt;strong&gt;main&lt;/strong&gt;.py:1: RuntimeWarning: invalid value encountered in true_divide&lt;br&gt;
  if &lt;strong&gt;name&lt;/strong&gt; == '&lt;strong&gt;main&lt;/strong&gt;':&lt;br&gt;
array([ nan,   1.,   1.,   1.,   1.,   1.,   1.,   1.,   1.,   1.])&lt;/p&gt;

&lt;h1&gt;
  
  
  Also warning, but not an error instead infinity
&lt;/h1&gt;

&lt;p&gt;1/arr&lt;br&gt;
/Users/marci/anaconda/lib/python3.5/site-packages/ipykernel/&lt;strong&gt;main&lt;/strong&gt;.py:1: RuntimeWarning: divide by zero encountered in true_divide&lt;br&gt;
  if &lt;strong&gt;name&lt;/strong&gt; == '&lt;strong&gt;main&lt;/strong&gt;':&lt;br&gt;
array([        inf,  1.        ,  0.5       ,  0.33333333,  0.25      ,&lt;br&gt;
        0.2       ,  0.16666667,  0.14285714,  0.125     ,  0.11111111])&lt;br&gt;
arr**3&lt;br&gt;
array([  0,   1,   8,  27,  64, 125, 216, 343, 512, 729])&lt;br&gt;
Universal Array Functions&lt;br&gt;
Numpy comes with many universal array functions, which are essentially just mathematical operations you can use to perform the operation across the array. Let's show some common ones:&lt;/p&gt;

&lt;h1&gt;
  
  
  Taking Square Roots
&lt;/h1&gt;

&lt;p&gt;np.sqrt(arr)&lt;br&gt;
array([ 0.        ,  1.        ,  1.41421356,  1.73205081,  2.        ,&lt;br&gt;
        2.23606798,  2.44948974,  2.64575131,  2.82842712,  3.        ])&lt;/p&gt;

&lt;h1&gt;
  
  
  Calcualting exponential (e^)
&lt;/h1&gt;

&lt;p&gt;np.exp(arr)&lt;br&gt;
array([  1.00000000e+00,   2.71828183e+00,   7.38905610e+00,&lt;br&gt;
         2.00855369e+01,   5.45981500e+01,   1.48413159e+02,&lt;br&gt;
         4.03428793e+02,   1.09663316e+03,   2.98095799e+03,&lt;br&gt;
         8.10308393e+03])&lt;br&gt;
np.max(arr) #same as arr.max()&lt;br&gt;
9&lt;br&gt;
np.sin(arr)&lt;br&gt;
array([ 0.        ,  0.84147098,  0.90929743,  0.14112001, -0.7568025 ,&lt;br&gt;
       -0.95892427, -0.2794155 ,  0.6569866 ,  0.98935825,  0.41211849])&lt;br&gt;
np.log(arr)&lt;br&gt;
/Users/marci/anaconda/lib/python3.5/site-packages/ipykernel/&lt;strong&gt;main&lt;/strong&gt;.py:1: RuntimeWarning: divide by zero encountered in log&lt;br&gt;
  if &lt;strong&gt;name&lt;/strong&gt; == '&lt;strong&gt;main&lt;/strong&gt;':&lt;br&gt;
array([       -inf,  0.        ,  0.69314718,  1.09861229,  1.38629436,&lt;br&gt;
        1.60943791,  1.79175947,  1.94591015,  2.07944154,  2.19722458])&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
