From c7aa0701dc79518b0616d0840a02ac1d0e8ee3a0 Mon Sep 17 00:00:00 2001 From: xiaoruiliu Date: Mon, 2 Sep 2024 19:15:13 -0700 Subject: [PATCH] make week 2 course notes public + searchable --- _quarto.yml | 4 +- ...nciples-and-Techniques-of-Data-Science.pdf | Bin 0 -> 142761 bytes docs/index.html | 12 + docs/pandas_1/pandas_1.html | 232 +++----------- docs/pandas_2/pandas_2.html | 286 +++++------------- docs/search.json | 110 +++++++ 6 files changed, 243 insertions(+), 401 deletions(-) create mode 100644 docs/Principles-and-Techniques-of-Data-Science.pdf diff --git a/_quarto.yml b/_quarto.yml index c06d8eac2..29a6a122f 100644 --- a/_quarto.yml +++ b/_quarto.yml @@ -17,8 +17,8 @@ book: chapters: - index.md - intro_lec/introduction.qmd - # - pandas_1/pandas_1.qmd - # - pandas_2/pandas_2.qmd + - pandas_1/pandas_1.qmd + - pandas_2/pandas_2.qmd # - pandas_3/pandas_3.qmd # - eda/eda.qmd # - regex/regex.qmd diff --git a/docs/Principles-and-Techniques-of-Data-Science.pdf b/docs/Principles-and-Techniques-of-Data-Science.pdf new file mode 100644 index 0000000000000000000000000000000000000000..7beef688c1b1f6416f45d9ddb8f8348094b72990 GIT binary patch literal 142761 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

{s&Tz6PGh_(_CHeHfh^@g?62D` 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 Z_4M}lgxTTo3h?sr^Wm|uC}=9;{U2YsC*S}8 literal 0 HcmV?d00001 diff --git a/docs/index.html b/docs/index.html index 70659ad0a..bbf5ac818 100644 --- a/docs/index.html +++ b/docs/index.html @@ -132,6 +132,18 @@ 1  Introduction + +

+ diff --git a/docs/pandas_1/pandas_1.html b/docs/pandas_1/pandas_1.html index 0b7682332..440d6f5ba 100644 --- a/docs/pandas_1/pandas_1.html +++ b/docs/pandas_1/pandas_1.html @@ -201,144 +201,6 @@ 3  Pandas II - - - - - - - - - - - - - - - - - - - - - - - - @@ -457,7 +319,7 @@

2.2 Series, DataFrames, and Indices

To begin our work in pandas, we must first import the library into our Python environment. This will allow us to use pandas data structures and methods in our code.

-
+
# `pd` is the conventional alias for Pandas, as `np` is for NumPy
 import pandas as pd
@@ -480,7 +342,7 @@

+
s = pd.Series(["welcome", "to", "data 100"])
 s
@@ -490,14 +352,14 @@

+
 # Accessing data values within the Series
  s.values
array(['welcome', 'to', 'data 100'], dtype=object)
-
+
 # Accessing the Index of the Series
  s.index
@@ -505,7 +367,7 @@

+
s = pd.Series([-1, 10, 2], index = ["a", "b", "c"])
 s
@@ -515,14 +377,14 @@

+
s.index
Index(['a', 'b', 'c'], dtype='object')

Indices can also be changed after initialization.

-
+
s.index = ["first", "second", "third"]
 s
@@ -532,7 +394,7 @@

+
s.index
Index(['first', 'second', 'third'], dtype='object')
@@ -547,7 +409,7 @@

  • A filtering condition.
  • To demonstrate this, let’s define the Series ser.

    -
    +
    ser = pd.Series([4, -2, 0, 6], index = ["a", "b", "c", "d"])
     ser
    @@ -560,17 +422,17 @@

    2.2.1.1.1 A Single Label
    -
    +
    # We return the value stored at the index label "a"
     ser["a"] 
    -
    np.int64(4)
    +
    4
    2.2.1.1.2 A List of Labels
    -
    +
    # We return a Series of the values stored at the index labels "a" and "c"
     ser[["a", "c"]] 
    @@ -584,7 +446,7 @@
    <
    2.2.1.1.3 A Filtering Condition

    Perhaps the most interesting (and useful) method of selecting data from a Series is by using a filtering condition.

    First, we apply a boolean operation to the Series. This creates a new Series of boolean values.

    -
    +
    # Filter condition: select all elements greater than 0
     ser > 0 
    @@ -596,7 +458,7 @@
    +
    ser[ser > 0] 
    a    4
    @@ -626,7 +488,7 @@ 

    2.2.2.1.1 From a CSV file

    In Data 100, our data are typically stored in a CSV (comma-separated values) file format. We can import a CSV file into a DataFrame by passing the data path as an argument to the following pandas function.
    pd.read_csv("filename.csv")

    With our new understanding of pandas in hand, let’s return to the elections dataset from before. Now, we can recognize that it is represented as a pandas DataFrame.

    -
    +
    elections = pd.read_csv("data/elections.csv")
     elections
    @@ -758,7 +620,7 @@
    2.2.2.1.2 Using a List and Column Name(s)

    We’ll now explore creating a DataFrame with data of our own.

    Consider the following examples. The first code cell creates a DataFrame with a single column Numbers.

    -
    +
    df_list = pd.DataFrame([1, 2, 3], columns=["Numbers"])
     df_list
    @@ -792,7 +654,7 @@
    +
    df_list = pd.DataFrame([[1, "one"], [2, "two"]], columns = ["Number", "Description"])
     df_list
    @@ -829,7 +691,7 @@
    2.2.2.1.3 From a Dictionary

    A third (and more common) way to create a DataFrame is with a dictionary. The dictionary keys represent the column names, and the dictionary values represent the column values.

    Below are two ways of implementing this approach. The first is based on specifying the columns of the DataFrame, whereas the second is based on specifying the rows of the DataFrame.

    -
    +
    df_dict = pd.DataFrame({
         "Fruit": ["Strawberry", "Orange"], 
         "Price": [5.49, 3.99]
    @@ -864,7 +726,7 @@ 
    -
    +
    df_dict = pd.DataFrame(
         [
             {"Fruit":"Strawberry", "Price":5.49}, 
    @@ -906,14 +768,14 @@ 
    2.2.2.1.4 From a Series

    Earlier, we explained how a Series was synonymous to a column in a DataFrame. It follows, then, that a DataFrame is equivalent to a collection of Series, which all share the same Index.

    In fact, we can initialize a DataFrame by merging two or more Series. Consider the Series s_a and s_b.

    -
    +
    # Notice how our indices, or row labels, are the same
     
     s_a = pd.Series(["a1", "a2", "a3"], index = ["r1", "r2", "r3"])
     s_b = pd.Series(["b1", "b2", "b3"], index = ["r1", "r2", "r3"])

    We can turn individual Series into a DataFrame using two common methods (shown below):

    -
    +
    pd.DataFrame(s_a)
    @@ -945,7 +807,7 @@
    -
    +
    s_b.to_frame()
    @@ -978,7 +840,7 @@

    To merge the two Series and specify their column names, we use the following syntax:

    -
    +
    pd.DataFrame({
         "A-column": s_a, 
         "B-column": s_b
    @@ -1023,7 +885,7 @@ 

    2.2.3 Indices

    On a more technical note, an index doesn’t have to be an integer, nor does it have to be unique. For example, we can set the index of the elections DataFrame to be the name of presidential candidates.

    -
    +
    # Creating a DataFrame from a CSV file and specifying the index column
     elections = pd.read_csv("data/elections.csv", index_col = "Candidate")
     elections
    @@ -1147,7 +1009,7 @@

    +
    elections.reset_index(inplace = True) # Resetting the index so we can set it again
     # This sets the index to the "Party" column
     elections.set_index("Party")
    @@ -1271,7 +1133,7 @@

    +
    # This resets the index to be the default list of integer
     elections.reset_index(inplace=True) 
     elections.index
    @@ -1294,7 +1156,7 @@

    2.3 DataFrame Attributes: Index, Columns, and Shape

    On the other hand, column names in a DataFrame are almost always unique. Looking back to the elections dataset, it wouldn’t make sense to have two columns named "Candidate". Sometimes, you’ll want to extract these different values, in particular, the list of row and column labels.

    For index/row labels, use DataFrame.index:

    -
    +
    elections.set_index("Party", inplace = True)
     elections.index
    @@ -1309,14 +1171,14 @@

    +
    elections.columns
    Index(['index', 'Candidate', 'Year', 'Popular vote', 'Result', '%'], dtype='object')

    And for the shape of the DataFrame, we can use DataFrame.shape to get the number of rows followed by the number of columns:

    -
    +
    elections.shape
    (182, 6)
    @@ -1345,13 +1207,13 @@

    2.4.1 Extracting data with .head and .tail

    The simplest scenario in which we want to extract data is when we simply want to select the first or last few rows of the DataFrame.

    To extract the first n rows of a DataFrame df, we use the syntax df.head(n).

    -
    +
    Code
    elections = pd.read_csv("data/elections.csv")
    -
    +
    # Extract the first 5 rows of the DataFrame
     elections.head(5)
    @@ -1423,7 +1285,7 @@

    +
    # Extract the last 5 rows of the DataFrame
     elections.tail(5)
    @@ -1509,14 +1371,14 @@

    +
    elections.loc[0, 'Candidate']
    'Andrew Jackson'

    Keep in mind that passing in just one argument as a single value will produce a Series. Below, we’ve extracted a subset of the "Popular vote" column as a Series.

    -
    +
    elections.loc[[87, 25, 179], "Popular vote"]
    87     15761254
    @@ -1526,7 +1388,7 @@ 

    to "Popular vote". Notice that unlike Python slicing, .loc is inclusive of the right upper bound.

    -
    +
    elections.loc[0:3, 'Year':'Popular vote']
    @@ -1578,7 +1440,7 @@

    +
    elections.loc[0:3, :]
    @@ -1640,7 +1502,7 @@

    +
    elections.loc[:, ["Year", "Candidate", "Result"]]
    @@ -1731,7 +1593,7 @@

    +
    elections.loc[[0, 1, 2, 3], ['Year', 'Candidate', 'Party', 'Popular vote']]
    @@ -1783,7 +1645,7 @@

    +
    elections.loc[[0, 1, 2, 3], :]
    @@ -1849,7 +1711,7 @@

    2.4.3 Integer-based Extraction: Indexing with .iloc

    Slicing with .iloc works similarly to .loc. However, .iloc uses the index positions of rows and columns rather than the labels (think to yourself: loc uses lables; iloc uses indices). The arguments to the .iloc function also behave similarly — single values, lists, indices, and any combination of these are permitted.

    Let’s begin reproducing our results from above. We’ll begin by selecting the first presidential candidate in our elections DataFrame:

    -
    +
    # elections.loc[0, "Candidate"] - Previous approach
     elections.iloc[0, 1]
    @@ -1858,7 +1720,7 @@

    \(0^{\text{th}}\) (equivalently, the first position) of the elections DataFrame. Generally, this is true of any DataFrame where the row labels are incremented in ascending order from 0.

    And, as before, if we were to pass in only one single value argument, our result would be a Series.

    -
    +
    elections.iloc[[1,2,3],1]
    1    John Quincy Adams
    @@ -1868,7 +1730,7 @@ 

    +
    # elections.loc[0:3, 'Year':'Popular vote'] - Previous approach
     elections.iloc[0:4, 0:4]
    @@ -1922,7 +1784,7 @@

    +
    #elections.loc[[0, 1, 2, 3], ['Year', 'Candidate', 'Party', 'Popular vote']] - Previous Approach
     elections.iloc[[0, 1, 2, 3], [0, 1, 2, 3]]
    @@ -1975,7 +1837,7 @@

    +
    elections.iloc[:, 0:3]
    @@ -2083,7 +1945,7 @@

    2.4.4.1 A slice of row numbers

    Say we wanted the first four rows of our elections DataFrame.

    -
    +
    elections[0:4]
    @@ -2148,7 +2010,7 @@

    2.4.4.2 A list of column labels

    Suppose we now want the first four columns.

    -
    +
    elections[["Year", "Candidate", "Party", "Popular vote"]]
    @@ -2253,7 +2115,7 @@

    2.4.4.3 A single-column label

    Lastly, [] allows us to extract only the "Candidate" column.

    -
    +
    elections["Candidate"]
    0         Andrew Jackson
    diff --git a/docs/pandas_2/pandas_2.html b/docs/pandas_2/pandas_2.html
    index 4c70c8486..fb66f5679 100644
    --- a/docs/pandas_2/pandas_2.html
    +++ b/docs/pandas_2/pandas_2.html
    @@ -64,7 +64,6 @@
     
     
     
    -
     
     
     
    @@ -172,144 +171,6 @@
       
      3  Pandas II
       
    - - - - - - - - - - - - - - - - - - - - - - - -
    @@ -382,7 +243,7 @@

    3 

    @@ -1579,14 +1440,14 @@

    3.3.2 .shape and .size

    .shape and .size are attributes of Series and DataFrames that measure the “amount” of data stored in the structure. Calling .shape returns a tuple containing the number of rows and columns present in the DataFrame or Series. .size is used to find the total number of elements in a structure, equivalent to the number of rows times the number of columns.

    Many functions strictly require the dimensions of the arguments along certain axes to match. Calling these dimension-finding functions is much faster than counting all of the items by hand.

    -
    +
    # Return the shape of the DataFrame, in the format (num_rows, num_columns)
     babynames.shape
    (407428, 5)
    -
    +
    # Return the size of the DataFrame, equal to num_rows * num_columns
     babynames.size
    @@ -1597,7 +1458,7 @@

    3.3.3 .describe()

    If many statistics are required from a DataFrame (minimum value, maximum value, mean value, etc.), then .describe() (documentation) can be used to compute all of them at once.

    -
    +
    babynames.describe()
    @@ -1659,7 +1520,7 @@

    +
    babynames["Sex"].describe()
    count     407428
    @@ -1674,7 +1535,7 @@ 

    3.3.4 .sample()

    As we will see later in the semester, random processes are at the heart of many data science techniques (for example, train-test splits, bootstrapping, and cross-validation). .sample() (documentation) lets us quickly select random entries (a row if called from a DataFrame, or a value if called from a Series).

    By default, .sample() selects entries without replacement. Pass in the argument replace=True to sample with replacement.

    -
    +
    # Sample a single row
     babynames.sample()
    @@ -1694,12 +1555,12 @@

    -28158 +234881 CA F -1950 -Vikki -14 +2021 +Khelani +7 @@ -1708,7 +1569,7 @@

    +
    # Sample 5 random rows, and select all columns after column 2
     babynames.sample(5).iloc[:, 2:]
    @@ -1726,34 +1587,34 @@

    -82058 -1979 -Lakesha -11 +98030 +1985 +Beatris +14 -387687 -2016 -Zayn -101 +23304 +1946 +Clarice +11 -105977 -1988 -Cecilia -213 +49990 +1964 +Iris +30 -75257 -1976 -Clarice -7 +16618 +1939 +Robin +29 -7685 -1925 -Elia -5 +125906 +1993 +Kelcey +10 @@ -1761,7 +1622,7 @@

    +
    # Randomly sample 4 names from the year 2000, with replacement, and select all columns after column 2
     babynames[babynames["Year"] == 2000].sample(4, replace = True).iloc[:, 2:]
    @@ -1779,28 +1640,28 @@

    -342973 +149143 2000 -Grayson -46 +Mariah +534 -151608 +342485 2000 -Roshni -8 +Isaac +1297 -343172 +149650 2000 -Dwayne -27 +Arielle +59 -343039 +343016 2000 -Jair -38 +Darrell +40 @@ -1813,7 +1674,7 @@

    3.3.5 .value_counts()

    The Series.value_counts() (documentation) method counts the number of occurrence of each unique value in a Series. In other words, it counts the number of times each unique value appears. This is often useful for determining the most or least common entries in a Series.

    In the example below, we can determine the name with the most years in which at least one person has taken that name by counting the number of times each name appears in the "Name" column of babynames. Note that the return value is also a Series.

    -
    +
    babynames["Name"].value_counts().head()
    Name
    @@ -1829,7 +1690,7 @@ 

    3.3.6 .unique()

    If we have a Series with many repeated values, then .unique() (documentation) can be used to identify only the unique values. Here we return an array of all the names in babynames.

    -
    +
    babynames["Name"].unique()
    array(['Mary', 'Helen', 'Dorothy', ..., 'Zae', 'Zai', 'Zayvier'],
    @@ -1840,7 +1701,7 @@ 

    3.3.7 .sort_values()

    Ordering a DataFrame can be useful for isolating extreme values. For example, the first 5 entries of a row sorted in descending order (that is, from highest to lowest) are the largest 5 values. .sort_values (documentation) allows us to order a DataFrame or Series by a specified column. We can choose to either receive the rows in ascending order (default) or descending order.

    -
    +
    # Sort the "Count" column from highest to lowest
     babynames.sort_values(by="Count", ascending=False).head()
    @@ -1906,7 +1767,7 @@

    Unlike when calling .value_counts() on a DataFrame, we do not need to explicitly specify the column used for sorting when calling .value_counts() on a Series. We can still specify the ordering paradigm – that is, whether values are sorted in ascending or descending order.

    -
    +
    # Sort the "Name" Series alphabetically
     babynames["Name"].sort_values(ascending=True).head()
    @@ -2356,9 +2217,6 @@

    diff --git a/docs/search.json b/docs/search.json index ed56e2191..9ce1fc63d 100644 --- a/docs/search.json +++ b/docs/search.json @@ -48,5 +48,115 @@ "crumbs": [ "1  Introduction" ] + }, + { + "objectID": "pandas_1/pandas_1.html", + "href": "pandas_1/pandas_1.html", + "title": "2  Pandas I", + "section": "", + "text": "2.1 Tabular Data\nData scientists work with data stored in a variety of formats. This class focuses primarily on tabular data — data that is stored in a table.\nTabular data is one of the most common systems that data scientists use to organize data. This is in large part due to the simplicity and flexibility of tables. Tables allow us to represent each observation, or instance of collecting data from an individual, as its own row. We can record each observation’s distinct characteristics, or features, in separate columns.\nTo see this in action, we’ll explore the elections dataset, which stores information about political candidates who ran for president of the United States in previous years.\nIn the elections dataset, each row (blue box) represents one instance of a candidate running for president in a particular year. For example, the first row represents Andrew Jackson running for president in the year 1824. Each column (yellow box) represents one characteristic piece of information about each presidential candidate. For example, the column named “Result” stores whether or not the candidate won the election.\nYour work in Data 8 helped you grow very familiar with using and interpreting data stored in a tabular format. Back then, you used the Table class of the datascience library, a special programming library created specifically for Data 8 students.\nIn Data 100, we will be working with the programming library pandas, which is generally accepted in the data science community as the industry- and academia-standard tool for manipulating tabular data (as well as the inspiration for Petey, our panda bear mascot).\nUsing pandas, we can", + "crumbs": [ + "2  Pandas I" + ] + }, + { + "objectID": "pandas_1/pandas_1.html#tabular-data", + "href": "pandas_1/pandas_1.html#tabular-data", + "title": "2  Pandas I", + "section": "", + "text": "Arrange data in a tabular format.\nExtract useful information filtered by specific conditions.\nOperate on data to gain new insights.\nApply NumPy functions to our data (our friends from Data 8).\nPerform vectorized computations to speed up our analysis (Lab 1).", + "crumbs": [ + "2  Pandas I" + ] + }, + { + "objectID": "pandas_1/pandas_1.html#series-dataframes-and-indices", + "href": "pandas_1/pandas_1.html#series-dataframes-and-indices", + "title": "2  Pandas I", + "section": "2.2 Series, DataFrames, and Indices", + "text": "2.2 Series, DataFrames, and Indices\nTo begin our work in pandas, we must first import the library into our Python environment. This will allow us to use pandas data structures and methods in our code.\n\n# `pd` is the conventional alias for Pandas, as `np` is for NumPy\nimport pandas as pd\n\nThere are three fundamental data structures in pandas:\n\nSeries: 1D labeled array data; best thought of as columnar data.\nDataFrame: 2D tabular data with rows and columns.\nIndex: A sequence of row/column labels.\n\nDataFrames, Series, and Indices can be represented visually in the following diagram, which considers the first few rows of the elections dataset.\n\n\n\nNotice how the DataFrame is a two-dimensional object — it contains both rows and columns. The Series above is a singular column of this DataFrame, namely the Result column. Both contain an Index, or a shared list of row labels (the integers from 0 to 4, inclusive).\n\n2.2.1 Series\nA Series represents a column of a DataFrame; more generally, it can be any 1-dimensional array-like object. It contains both:\n\nA sequence of values of the same type.\nA sequence of data labels called the index.\n\nIn the cell below, we create a Series named s.\n\ns = pd.Series([\"welcome\", \"to\", \"data 100\"])\ns\n\n0 welcome\n1 to\n2 data 100\ndtype: object\n\n\n\n # Accessing data values within the Series\n s.values\n\narray(['welcome', 'to', 'data 100'], dtype=object)\n\n\n\n # Accessing the Index of the Series\n s.index\n\nRangeIndex(start=0, stop=3, step=1)\n\n\nBy default, the index of a Series is a sequential list of integers beginning from 0. Optionally, a manually specified list of desired indices can be passed to the index argument.\n\ns = pd.Series([-1, 10, 2], index = [\"a\", \"b\", \"c\"])\ns\n\na -1\nb 10\nc 2\ndtype: int64\n\n\n\ns.index\n\nIndex(['a', 'b', 'c'], dtype='object')\n\n\nIndices can also be changed after initialization.\n\ns.index = [\"first\", \"second\", \"third\"]\ns\n\nfirst -1\nsecond 10\nthird 2\ndtype: int64\n\n\n\ns.index\n\nIndex(['first', 'second', 'third'], dtype='object')\n\n\n\n2.2.1.1 Selection in Series\nMuch like when working with NumPy arrays, we can select a single value or a set of values from a Series. To do so, there are three primary methods:\n\nA single label.\nA list of labels.\nA filtering condition.\n\nTo demonstrate this, let’s define the Series ser.\n\nser = pd.Series([4, -2, 0, 6], index = [\"a\", \"b\", \"c\", \"d\"])\nser\n\na 4\nb -2\nc 0\nd 6\ndtype: int64\n\n\n\n2.2.1.1.1 A Single Label\n\n# We return the value stored at the index label \"a\"\nser[\"a\"] \n\n4\n\n\n\n\n2.2.1.1.2 A List of Labels\n\n# We return a Series of the values stored at the index labels \"a\" and \"c\"\nser[[\"a\", \"c\"]] \n\na 4\nc 0\ndtype: int64\n\n\n\n\n2.2.1.1.3 A Filtering Condition\nPerhaps the most interesting (and useful) method of selecting data from a Series is by using a filtering condition.\nFirst, we apply a boolean operation to the Series. This creates a new Series of boolean values.\n\n# Filter condition: select all elements greater than 0\nser > 0 \n\na True\nb False\nc False\nd True\ndtype: bool\n\n\nWe then use this boolean condition to index into our original Series. pandas will select only the entries in the original Series that satisfy the condition.\n\nser[ser > 0] \n\na 4\nd 6\ndtype: int64\n\n\n\n\n\n\n2.2.2 DataFrames\nTypically, we will work with Series using the perspective that they are columns in a DataFrame. We can think of a DataFrame as a collection of Series that all share the same Index.\nIn Data 8, you encountered the Table class of the datascience library, which represented tabular data. In Data 100, we’ll be using the DataFrame class of the pandas library.\n\n2.2.2.1 Creating a DataFrame\nThere are many ways to create a DataFrame. Here, we will cover the most popular approaches:\n\nFrom a CSV file.\nUsing a list and column name(s).\nFrom a dictionary.\nFrom a Series.\n\nMore generally, the syntax for creating a DataFrame is:\n pandas.DataFrame(data, index, columns)\n\n2.2.2.1.1 From a CSV file\nIn Data 100, our data are typically stored in a CSV (comma-separated values) file format. We can import a CSV file into a DataFrame by passing the data path as an argument to the following pandas function.  pd.read_csv(\"filename.csv\")\nWith our new understanding of pandas in hand, let’s return to the elections dataset from before. Now, we can recognize that it is represented as a pandas DataFrame.\n\nelections = pd.read_csv(\"data/elections.csv\")\nelections\n\n\n\n\n\n\n\n\nYear\nCandidate\nParty\nPopular vote\nResult\n%\n\n\n\n\n0\n1824\nAndrew Jackson\nDemocratic-Republican\n151271\nloss\n57.210122\n\n\n1\n1824\nJohn Quincy Adams\nDemocratic-Republican\n113142\nwin\n42.789878\n\n\n2\n1828\nAndrew Jackson\nDemocratic\n642806\nwin\n56.203927\n\n\n3\n1828\nJohn Quincy Adams\nNational Republican\n500897\nloss\n43.796073\n\n\n4\n1832\nAndrew Jackson\nDemocratic\n702735\nwin\n54.574789\n\n\n...\n...\n...\n...\n...\n...\n...\n\n\n177\n2016\nJill Stein\nGreen\n1457226\nloss\n1.073699\n\n\n178\n2020\nJoseph Biden\nDemocratic\n81268924\nwin\n51.311515\n\n\n179\n2020\nDonald Trump\nRepublican\n74216154\nloss\n46.858542\n\n\n180\n2020\nJo Jorgensen\nLibertarian\n1865724\nloss\n1.177979\n\n\n181\n2020\nHoward Hawkins\nGreen\n405035\nloss\n0.255731\n\n\n\n\n182 rows × 6 columns\n\n\n\nThis code stores our DataFrame object in the elections variable. Upon inspection, our elections DataFrame has 182 rows and 6 columns (Year, Candidate, Party, Popular Vote, Result, %). Each row represents a single record — in our example, a presidential candidate from some particular year. Each column represents a single attribute or feature of the record.\n\n\n2.2.2.1.2 Using a List and Column Name(s)\nWe’ll now explore creating a DataFrame with data of our own.\nConsider the following examples. The first code cell creates a DataFrame with a single column Numbers.\n\ndf_list = pd.DataFrame([1, 2, 3], columns=[\"Numbers\"])\ndf_list\n\n\n\n\n\n\n\n\nNumbers\n\n\n\n\n0\n1\n\n\n1\n2\n\n\n2\n3\n\n\n\n\n\n\n\nThe second creates a DataFrame with the columns Numbers and Description. Notice how a 2D list of values is required to initialize the second DataFrame — each nested list represents a single row of data.\n\ndf_list = pd.DataFrame([[1, \"one\"], [2, \"two\"]], columns = [\"Number\", \"Description\"])\ndf_list\n\n\n\n\n\n\n\n\nNumber\nDescription\n\n\n\n\n0\n1\none\n\n\n1\n2\ntwo\n\n\n\n\n\n\n\n\n\n2.2.2.1.3 From a Dictionary\nA third (and more common) way to create a DataFrame is with a dictionary. The dictionary keys represent the column names, and the dictionary values represent the column values.\nBelow are two ways of implementing this approach. The first is based on specifying the columns of the DataFrame, whereas the second is based on specifying the rows of the DataFrame.\n\ndf_dict = pd.DataFrame({\n \"Fruit\": [\"Strawberry\", \"Orange\"], \n \"Price\": [5.49, 3.99]\n})\ndf_dict\n\n\n\n\n\n\n\n\nFruit\nPrice\n\n\n\n\n0\nStrawberry\n5.49\n\n\n1\nOrange\n3.99\n\n\n\n\n\n\n\n\ndf_dict = pd.DataFrame(\n [\n {\"Fruit\":\"Strawberry\", \"Price\":5.49}, \n {\"Fruit\": \"Orange\", \"Price\":3.99}\n ]\n)\ndf_dict\n\n\n\n\n\n\n\n\nFruit\nPrice\n\n\n\n\n0\nStrawberry\n5.49\n\n\n1\nOrange\n3.99\n\n\n\n\n\n\n\n\n\n2.2.2.1.4 From a Series\nEarlier, we explained how a Series was synonymous to a column in a DataFrame. It follows, then, that a DataFrame is equivalent to a collection of Series, which all share the same Index.\nIn fact, we can initialize a DataFrame by merging two or more Series. Consider the Series s_a and s_b.\n\n# Notice how our indices, or row labels, are the same\n\ns_a = pd.Series([\"a1\", \"a2\", \"a3\"], index = [\"r1\", \"r2\", \"r3\"])\ns_b = pd.Series([\"b1\", \"b2\", \"b3\"], index = [\"r1\", \"r2\", \"r3\"])\n\nWe can turn individual Series into a DataFrame using two common methods (shown below):\n\npd.DataFrame(s_a)\n\n\n\n\n\n\n\n\n0\n\n\n\n\nr1\na1\n\n\nr2\na2\n\n\nr3\na3\n\n\n\n\n\n\n\n\ns_b.to_frame()\n\n\n\n\n\n\n\n\n0\n\n\n\n\nr1\nb1\n\n\nr2\nb2\n\n\nr3\nb3\n\n\n\n\n\n\n\nTo merge the two Series and specify their column names, we use the following syntax:\n\npd.DataFrame({\n \"A-column\": s_a, \n \"B-column\": s_b\n})\n\n\n\n\n\n\n\n\nA-column\nB-column\n\n\n\n\nr1\na1\nb1\n\n\nr2\na2\nb2\n\n\nr3\na3\nb3\n\n\n\n\n\n\n\n\n\n\n\n2.2.3 Indices\nOn a more technical note, an index doesn’t have to be an integer, nor does it have to be unique. For example, we can set the index of the elections DataFrame to be the name of presidential candidates.\n\n# Creating a DataFrame from a CSV file and specifying the index column\nelections = pd.read_csv(\"data/elections.csv\", index_col = \"Candidate\")\nelections\n\n\n\n\n\n\n\n\nYear\nParty\nPopular vote\nResult\n%\n\n\nCandidate\n\n\n\n\n\n\n\n\n\nAndrew Jackson\n1824\nDemocratic-Republican\n151271\nloss\n57.210122\n\n\nJohn Quincy Adams\n1824\nDemocratic-Republican\n113142\nwin\n42.789878\n\n\nAndrew Jackson\n1828\nDemocratic\n642806\nwin\n56.203927\n\n\nJohn Quincy Adams\n1828\nNational Republican\n500897\nloss\n43.796073\n\n\nAndrew Jackson\n1832\nDemocratic\n702735\nwin\n54.574789\n\n\n...\n...\n...\n...\n...\n...\n\n\nJill Stein\n2016\nGreen\n1457226\nloss\n1.073699\n\n\nJoseph Biden\n2020\nDemocratic\n81268924\nwin\n51.311515\n\n\nDonald Trump\n2020\nRepublican\n74216154\nloss\n46.858542\n\n\nJo Jorgensen\n2020\nLibertarian\n1865724\nloss\n1.177979\n\n\nHoward Hawkins\n2020\nGreen\n405035\nloss\n0.255731\n\n\n\n\n182 rows × 5 columns\n\n\n\nWe can also select a new column and set it as the index of the DataFrame. For example, we can set the index of the elections DataFrame to represent the candidate’s party.\n\nelections.reset_index(inplace = True) # Resetting the index so we can set it again\n# This sets the index to the \"Party\" column\nelections.set_index(\"Party\")\n\n\n\n\n\n\n\n\nCandidate\nYear\nPopular vote\nResult\n%\n\n\nParty\n\n\n\n\n\n\n\n\n\nDemocratic-Republican\nAndrew Jackson\n1824\n151271\nloss\n57.210122\n\n\nDemocratic-Republican\nJohn Quincy Adams\n1824\n113142\nwin\n42.789878\n\n\nDemocratic\nAndrew Jackson\n1828\n642806\nwin\n56.203927\n\n\nNational Republican\nJohn Quincy Adams\n1828\n500897\nloss\n43.796073\n\n\nDemocratic\nAndrew Jackson\n1832\n702735\nwin\n54.574789\n\n\n...\n...\n...\n...\n...\n...\n\n\nGreen\nJill Stein\n2016\n1457226\nloss\n1.073699\n\n\nDemocratic\nJoseph Biden\n2020\n81268924\nwin\n51.311515\n\n\nRepublican\nDonald Trump\n2020\n74216154\nloss\n46.858542\n\n\nLibertarian\nJo Jorgensen\n2020\n1865724\nloss\n1.177979\n\n\nGreen\nHoward Hawkins\n2020\n405035\nloss\n0.255731\n\n\n\n\n182 rows × 5 columns\n\n\n\nAnd, if we’d like, we can revert the index back to the default list of integers.\n\n# This resets the index to be the default list of integer\nelections.reset_index(inplace=True) \nelections.index\n\nRangeIndex(start=0, stop=182, step=1)\n\n\nIt is also important to note that the row labels that constitute an index don’t have to be unique. While index values can be unique and numeric, acting as a row number, they can also be named and non-unique.\nHere we see unique and numeric index values.\n\n\n\nHowever, here the index values are not unique.", + "crumbs": [ + "2  Pandas I" + ] + }, + { + "objectID": "pandas_1/pandas_1.html#dataframe-attributes-index-columns-and-shape", + "href": "pandas_1/pandas_1.html#dataframe-attributes-index-columns-and-shape", + "title": "2  Pandas I", + "section": "2.3 DataFrame Attributes: Index, Columns, and Shape", + "text": "2.3 DataFrame Attributes: Index, Columns, and Shape\nOn the other hand, column names in a DataFrame are almost always unique. Looking back to the elections dataset, it wouldn’t make sense to have two columns named \"Candidate\". Sometimes, you’ll want to extract these different values, in particular, the list of row and column labels.\nFor index/row labels, use DataFrame.index:\n\nelections.set_index(\"Party\", inplace = True)\nelections.index\n\nIndex(['Democratic-Republican', 'Democratic-Republican', 'Democratic',\n 'National Republican', 'Democratic', 'National Republican',\n 'Anti-Masonic', 'Whig', 'Democratic', 'Whig',\n ...\n 'Constitution', 'Republican', 'Independent', 'Libertarian',\n 'Democratic', 'Green', 'Democratic', 'Republican', 'Libertarian',\n 'Green'],\n dtype='object', name='Party', length=182)\n\n\nFor column labels, use DataFrame.columns:\n\nelections.columns\n\nIndex(['index', 'Candidate', 'Year', 'Popular vote', 'Result', '%'], dtype='object')\n\n\nAnd for the shape of the DataFrame, we can use DataFrame.shape to get the number of rows followed by the number of columns:\n\nelections.shape\n\n(182, 6)", + "crumbs": [ + "2  Pandas I" + ] + }, + { + "objectID": "pandas_1/pandas_1.html#slicing-in-dataframes", + "href": "pandas_1/pandas_1.html#slicing-in-dataframes", + "title": "2  Pandas I", + "section": "2.4 Slicing in DataFrames", + "text": "2.4 Slicing in DataFrames\nNow that we’ve learned more about DataFrames, let’s dive deeper into their capabilities.\nThe API (Application Programming Interface) for the DataFrame class is enormous. In this section, we’ll discuss several methods of the DataFrame API that allow us to extract subsets of data.\nThe simplest way to manipulate a DataFrame is to extract a subset of rows and columns, known as slicing.\nCommon ways we may want to extract data are grabbing:\n\nThe first or last n rows in the DataFrame.\nData with a certain label.\nData at a certain position.\n\nWe will do so with four primary methods of the DataFrame class:\n\n.head and .tail\n.loc\n.iloc\n[]\n\n\n2.4.1 Extracting data with .head and .tail\nThe simplest scenario in which we want to extract data is when we simply want to select the first or last few rows of the DataFrame.\nTo extract the first n rows of a DataFrame df, we use the syntax df.head(n).\n\n\nCode\nelections = pd.read_csv(\"data/elections.csv\")\n\n\n\n# Extract the first 5 rows of the DataFrame\nelections.head(5)\n\n\n\n\n\n\n\n\nYear\nCandidate\nParty\nPopular vote\nResult\n%\n\n\n\n\n0\n1824\nAndrew Jackson\nDemocratic-Republican\n151271\nloss\n57.210122\n\n\n1\n1824\nJohn Quincy Adams\nDemocratic-Republican\n113142\nwin\n42.789878\n\n\n2\n1828\nAndrew Jackson\nDemocratic\n642806\nwin\n56.203927\n\n\n3\n1828\nJohn Quincy Adams\nNational Republican\n500897\nloss\n43.796073\n\n\n4\n1832\nAndrew Jackson\nDemocratic\n702735\nwin\n54.574789\n\n\n\n\n\n\n\nSimilarly, calling df.tail(n) allows us to extract the last n rows of the DataFrame.\n\n# Extract the last 5 rows of the DataFrame\nelections.tail(5)\n\n\n\n\n\n\n\n\nYear\nCandidate\nParty\nPopular vote\nResult\n%\n\n\n\n\n177\n2016\nJill Stein\nGreen\n1457226\nloss\n1.073699\n\n\n178\n2020\nJoseph Biden\nDemocratic\n81268924\nwin\n51.311515\n\n\n179\n2020\nDonald Trump\nRepublican\n74216154\nloss\n46.858542\n\n\n180\n2020\nJo Jorgensen\nLibertarian\n1865724\nloss\n1.177979\n\n\n181\n2020\nHoward Hawkins\nGreen\n405035\nloss\n0.255731\n\n\n\n\n\n\n\n\n\n2.4.2 Label-based Extraction: Indexing with .loc\nFor the more complex task of extracting data with specific column or index labels, we can use .loc. The .loc accessor allows us to specify the labels of rows and columns we wish to extract. The labels (commonly referred to as the indices) are the bold text on the far left of a DataFrame, while the column labels are the column names found at the top of a DataFrame.\n\n\n\nTo grab data with .loc, we must specify the row and column label(s) where the data exists. The row labels are the first argument to the .loc function; the column labels are the second.\nArguments to .loc can be:\n\nA single value.\nA slice.\nA list.\n\nFor example, to select a single value, we can select the row labeled 0 and the column labeled Candidate from the elections DataFrame.\n\nelections.loc[0, 'Candidate']\n\n'Andrew Jackson'\n\n\nKeep in mind that passing in just one argument as a single value will produce a Series. Below, we’ve extracted a subset of the \"Popular vote\" column as a Series.\n\nelections.loc[[87, 25, 179], \"Popular vote\"]\n\n87 15761254\n25 848019\n179 74216154\nName: Popular vote, dtype: int64\n\n\nTo select multiple rows and columns, we can use Python slice notation. Here, we select the rows from labels 0 to 3 and the columns from labels \"Year\" to \"Popular vote\". Notice that unlike Python slicing, .loc is inclusive of the right upper bound.\n\nelections.loc[0:3, 'Year':'Popular vote']\n\n\n\n\n\n\n\n\nYear\nCandidate\nParty\nPopular vote\n\n\n\n\n0\n1824\nAndrew Jackson\nDemocratic-Republican\n151271\n\n\n1\n1824\nJohn Quincy Adams\nDemocratic-Republican\n113142\n\n\n2\n1828\nAndrew Jackson\nDemocratic\n642806\n\n\n3\n1828\nJohn Quincy Adams\nNational Republican\n500897\n\n\n\n\n\n\n\nSuppose that instead, we want to extract all column values for the first four rows in the elections DataFrame. The shorthand : is useful for this.\n\nelections.loc[0:3, :]\n\n\n\n\n\n\n\n\nYear\nCandidate\nParty\nPopular vote\nResult\n%\n\n\n\n\n0\n1824\nAndrew Jackson\nDemocratic-Republican\n151271\nloss\n57.210122\n\n\n1\n1824\nJohn Quincy Adams\nDemocratic-Republican\n113142\nwin\n42.789878\n\n\n2\n1828\nAndrew Jackson\nDemocratic\n642806\nwin\n56.203927\n\n\n3\n1828\nJohn Quincy Adams\nNational Republican\n500897\nloss\n43.796073\n\n\n\n\n\n\n\nWe can use the same shorthand to extract all rows.\n\nelections.loc[:, [\"Year\", \"Candidate\", \"Result\"]]\n\n\n\n\n\n\n\n\nYear\nCandidate\nResult\n\n\n\n\n0\n1824\nAndrew Jackson\nloss\n\n\n1\n1824\nJohn Quincy Adams\nwin\n\n\n2\n1828\nAndrew Jackson\nwin\n\n\n3\n1828\nJohn Quincy Adams\nloss\n\n\n4\n1832\nAndrew Jackson\nwin\n\n\n...\n...\n...\n...\n\n\n177\n2016\nJill Stein\nloss\n\n\n178\n2020\nJoseph Biden\nwin\n\n\n179\n2020\nDonald Trump\nloss\n\n\n180\n2020\nJo Jorgensen\nloss\n\n\n181\n2020\nHoward Hawkins\nloss\n\n\n\n\n182 rows × 3 columns\n\n\n\nThere are a couple of things we should note. Firstly, unlike conventional Python, pandas allows us to slice string values (in our example, the column labels). Secondly, slicing with .loc is inclusive. Notice how our resulting DataFrame includes every row and column between and including the slice labels we specified.\nEquivalently, we can use a list to obtain multiple rows and columns in our elections DataFrame.\n\nelections.loc[[0, 1, 2, 3], ['Year', 'Candidate', 'Party', 'Popular vote']]\n\n\n\n\n\n\n\n\nYear\nCandidate\nParty\nPopular vote\n\n\n\n\n0\n1824\nAndrew Jackson\nDemocratic-Republican\n151271\n\n\n1\n1824\nJohn Quincy Adams\nDemocratic-Republican\n113142\n\n\n2\n1828\nAndrew Jackson\nDemocratic\n642806\n\n\n3\n1828\nJohn Quincy Adams\nNational Republican\n500897\n\n\n\n\n\n\n\nLastly, we can interchange list and slicing notation.\n\nelections.loc[[0, 1, 2, 3], :]\n\n\n\n\n\n\n\n\nYear\nCandidate\nParty\nPopular vote\nResult\n%\n\n\n\n\n0\n1824\nAndrew Jackson\nDemocratic-Republican\n151271\nloss\n57.210122\n\n\n1\n1824\nJohn Quincy Adams\nDemocratic-Republican\n113142\nwin\n42.789878\n\n\n2\n1828\nAndrew Jackson\nDemocratic\n642806\nwin\n56.203927\n\n\n3\n1828\nJohn Quincy Adams\nNational Republican\n500897\nloss\n43.796073\n\n\n\n\n\n\n\n\n\n2.4.3 Integer-based Extraction: Indexing with .iloc\nSlicing with .iloc works similarly to .loc. However, .iloc uses the index positions of rows and columns rather than the labels (think to yourself: loc uses lables; iloc uses indices). The arguments to the .iloc function also behave similarly — single values, lists, indices, and any combination of these are permitted.\nLet’s begin reproducing our results from above. We’ll begin by selecting the first presidential candidate in our elections DataFrame:\n\n# elections.loc[0, \"Candidate\"] - Previous approach\nelections.iloc[0, 1]\n\n'Andrew Jackson'\n\n\nNotice how the first argument to both .loc and .iloc are the same. This is because the row with a label of 0 is conveniently in the \\(0^{\\text{th}}\\) (equivalently, the first position) of the elections DataFrame. Generally, this is true of any DataFrame where the row labels are incremented in ascending order from 0.\nAnd, as before, if we were to pass in only one single value argument, our result would be a Series.\n\nelections.iloc[[1,2,3],1]\n\n1 John Quincy Adams\n2 Andrew Jackson\n3 John Quincy Adams\nName: Candidate, dtype: object\n\n\nHowever, when we select the first four rows and columns using .iloc, we notice something.\n\n# elections.loc[0:3, 'Year':'Popular vote'] - Previous approach\nelections.iloc[0:4, 0:4]\n\n\n\n\n\n\n\n\nYear\nCandidate\nParty\nPopular vote\n\n\n\n\n0\n1824\nAndrew Jackson\nDemocratic-Republican\n151271\n\n\n1\n1824\nJohn Quincy Adams\nDemocratic-Republican\n113142\n\n\n2\n1828\nAndrew Jackson\nDemocratic\n642806\n\n\n3\n1828\nJohn Quincy Adams\nNational Republican\n500897\n\n\n\n\n\n\n\nSlicing is no longer inclusive in .iloc — it’s exclusive. In other words, the right end of a slice is not included when using .iloc. This is one of the subtleties of pandas syntax; you will get used to it with practice.\nList behavior works just as expected.\n\n#elections.loc[[0, 1, 2, 3], ['Year', 'Candidate', 'Party', 'Popular vote']] - Previous Approach\nelections.iloc[[0, 1, 2, 3], [0, 1, 2, 3]]\n\n\n\n\n\n\n\n\nYear\nCandidate\nParty\nPopular vote\n\n\n\n\n0\n1824\nAndrew Jackson\nDemocratic-Republican\n151271\n\n\n1\n1824\nJohn Quincy Adams\nDemocratic-Republican\n113142\n\n\n2\n1828\nAndrew Jackson\nDemocratic\n642806\n\n\n3\n1828\nJohn Quincy Adams\nNational Republican\n500897\n\n\n\n\n\n\n\nAnd just like with .loc, we can use a colon with .iloc to extract all rows or columns.\n\nelections.iloc[:, 0:3]\n\n\n\n\n\n\n\n\nYear\nCandidate\nParty\n\n\n\n\n0\n1824\nAndrew Jackson\nDemocratic-Republican\n\n\n1\n1824\nJohn Quincy Adams\nDemocratic-Republican\n\n\n2\n1828\nAndrew Jackson\nDemocratic\n\n\n3\n1828\nJohn Quincy Adams\nNational Republican\n\n\n4\n1832\nAndrew Jackson\nDemocratic\n\n\n...\n...\n...\n...\n\n\n177\n2016\nJill Stein\nGreen\n\n\n178\n2020\nJoseph Biden\nDemocratic\n\n\n179\n2020\nDonald Trump\nRepublican\n\n\n180\n2020\nJo Jorgensen\nLibertarian\n\n\n181\n2020\nHoward Hawkins\nGreen\n\n\n\n\n182 rows × 3 columns\n\n\n\nThis discussion begs the question: when should we use .loc vs. .iloc? In most cases, .loc is generally safer to use. You can imagine .iloc may return incorrect values when applied to a dataset where the ordering of data can change. However, .iloc can still be useful — for example, if you are looking at a DataFrame of sorted movie earnings and want to get the median earnings for a given year, you can use .iloc to index into the middle.\nOverall, it is important to remember that:\n\n.loc performances label-based extraction.\n.iloc performs integer-based extraction.\n\n\n\n2.4.4 Context-dependent Extraction: Indexing with []\nThe [] selection operator is the most baffling of all, yet the most commonly used. It only takes a single argument, which may be one of the following:\n\nA slice of row numbers.\nA list of column labels.\nA single-column label.\n\nThat is, [] is context-dependent. Let’s see some examples.\n\n2.4.4.1 A slice of row numbers\nSay we wanted the first four rows of our elections DataFrame.\n\nelections[0:4]\n\n\n\n\n\n\n\n\nYear\nCandidate\nParty\nPopular vote\nResult\n%\n\n\n\n\n0\n1824\nAndrew Jackson\nDemocratic-Republican\n151271\nloss\n57.210122\n\n\n1\n1824\nJohn Quincy Adams\nDemocratic-Republican\n113142\nwin\n42.789878\n\n\n2\n1828\nAndrew Jackson\nDemocratic\n642806\nwin\n56.203927\n\n\n3\n1828\nJohn Quincy Adams\nNational Republican\n500897\nloss\n43.796073\n\n\n\n\n\n\n\n\n\n2.4.4.2 A list of column labels\nSuppose we now want the first four columns.\n\nelections[[\"Year\", \"Candidate\", \"Party\", \"Popular vote\"]]\n\n\n\n\n\n\n\n\nYear\nCandidate\nParty\nPopular vote\n\n\n\n\n0\n1824\nAndrew Jackson\nDemocratic-Republican\n151271\n\n\n1\n1824\nJohn Quincy Adams\nDemocratic-Republican\n113142\n\n\n2\n1828\nAndrew Jackson\nDemocratic\n642806\n\n\n3\n1828\nJohn Quincy Adams\nNational Republican\n500897\n\n\n4\n1832\nAndrew Jackson\nDemocratic\n702735\n\n\n...\n...\n...\n...\n...\n\n\n177\n2016\nJill Stein\nGreen\n1457226\n\n\n178\n2020\nJoseph Biden\nDemocratic\n81268924\n\n\n179\n2020\nDonald Trump\nRepublican\n74216154\n\n\n180\n2020\nJo Jorgensen\nLibertarian\n1865724\n\n\n181\n2020\nHoward Hawkins\nGreen\n405035\n\n\n\n\n182 rows × 4 columns\n\n\n\n\n\n2.4.4.3 A single-column label\nLastly, [] allows us to extract only the \"Candidate\" column.\n\nelections[\"Candidate\"]\n\n0 Andrew Jackson\n1 John Quincy Adams\n2 Andrew Jackson\n3 John Quincy Adams\n4 Andrew Jackson\n ... \n177 Jill Stein\n178 Joseph Biden\n179 Donald Trump\n180 Jo Jorgensen\n181 Howard Hawkins\nName: Candidate, Length: 182, dtype: object\n\n\nThe output is a Series! In this course, we’ll become very comfortable with [], especially for selecting columns. In practice, [] is much more common than .loc, especially since it is far more concise.", + "crumbs": [ + "2  Pandas I" + ] + }, + { + "objectID": "pandas_1/pandas_1.html#parting-note", + "href": "pandas_1/pandas_1.html#parting-note", + "title": "2  Pandas I", + "section": "2.5 Parting Note", + "text": "2.5 Parting Note\nThe pandas library is enormous and contains many useful functions. Here is a link to its documentation. We certainly don’t expect you to memorize each and every method of the library, and we will give you a reference sheet for exams.\nThe introductory Data 100 pandas lectures will provide a high-level view of the key data structures and methods that will form the foundation of your pandas knowledge. A goal of this course is to help you build your familiarity with the real-world programming practice of … Googling! Answers to your questions can be found in documentation, Stack Overflow, etc. Being able to search for, read, and implement documentation is an important life skill for any data scientist.\nWith that, we will move on to Pandas II!", + "crumbs": [ + "2  Pandas I" + ] + }, + { + "objectID": "pandas_2/pandas_2.html", + "href": "pandas_2/pandas_2.html", + "title": "3  Pandas II", + "section": "", + "text": "3.1 Conditional Selection\nConditional selection allows us to select a subset of rows in a DataFrame that satisfy some specified condition.\nTo understand how to use conditional selection, we must look at another possible input of the .loc and [] methods – a boolean array, which is simply an array or Series where each element is either True or False. This boolean array must have a length equal to the number of rows in the DataFrame. It will return all rows that correspond to a value of True in the array. We used a very similar technique when performing conditional extraction from a Series in the last lecture.\nTo see this in action, let’s select all even-indexed rows in the first 10 rows of our DataFrame.\n# Ask yourself: why is :9 is the correct slice to select the first 10 rows?\nbabynames_first_10_rows = babynames.loc[:9, :]\n\n# Notice how we have exactly 10 elements in our boolean array argument\nbabynames_first_10_rows[[True, False, True, False, True, False, True, False, True, False]]\n\n\n\n\n\n\n\n\nState\nSex\nYear\nName\nCount\n\n\n\n\n0\nCA\nF\n1910\nMary\n295\n\n\n2\nCA\nF\n1910\nDorothy\n220\n\n\n4\nCA\nF\n1910\nFrances\n134\n\n\n6\nCA\nF\n1910\nEvelyn\n126\n\n\n8\nCA\nF\n1910\nVirginia\n101\nWe can perform a similar operation using .loc.\nbabynames_first_10_rows.loc[[True, False, True, False, True, False, True, False, True, False], :]\n\n\n\n\n\n\n\n\nState\nSex\nYear\nName\nCount\n\n\n\n\n0\nCA\nF\n1910\nMary\n295\n\n\n2\nCA\nF\n1910\nDorothy\n220\n\n\n4\nCA\nF\n1910\nFrances\n134\n\n\n6\nCA\nF\n1910\nEvelyn\n126\n\n\n8\nCA\nF\n1910\nVirginia\n101\nThese techniques worked well in this example, but you can imagine how tedious it might be to list out True and Falsefor every row in a larger DataFrame. To make things easier, we can instead provide a logical condition as an input to .loc or [] that returns a boolean array with the necessary length.\nFor example, to return all names associated with F sex:\n# First, use a logical condition to generate a boolean array\nlogical_operator = (babynames[\"Sex\"] == \"F\")\n\n# Then, use this boolean array to filter the DataFrame\nbabynames[logical_operator].head()\n\n\n\n\n\n\n\n\nState\nSex\nYear\nName\nCount\n\n\n\n\n0\nCA\nF\n1910\nMary\n295\n\n\n1\nCA\nF\n1910\nHelen\n239\n\n\n2\nCA\nF\n1910\nDorothy\n220\n\n\n3\nCA\nF\n1910\nMargaret\n163\n\n\n4\nCA\nF\n1910\nFrances\n134\nRecall from the previous lecture that .head() will return only the first few rows in the DataFrame. In reality, babynames[logical operator] contains as many rows as there are entries in the original babynames DataFrame with sex \"F\".\nHere, logical_operator evaluates to a Series of boolean values with length 407428.\nCode\nprint(\"There are a total of {} values in 'logical_operator'\".format(len(logical_operator)))\n\n\nThere are a total of 407428 values in 'logical_operator'\nRows starting at row 0 and ending at row 239536 evaluate to True and are thus returned in the DataFrame. Rows from 239537 onwards evaluate to False and are omitted from the output.\nCode\nprint(\"The 0th item in this 'logical_operator' is: {}\".format(logical_operator.iloc[0]))\nprint(\"The 239536th item in this 'logical_operator' is: {}\".format(logical_operator.iloc[239536]))\nprint(\"The 239537th item in this 'logical_operator' is: {}\".format(logical_operator.iloc[239537]))\n\n\nThe 0th item in this 'logical_operator' is: True\nThe 239536th item in this 'logical_operator' is: True\nThe 239537th item in this 'logical_operator' is: False\nPassing a Series as an argument to babynames[] has the same effect as using a boolean array. In fact, the [] selection operator can take a boolean Series, array, and list as arguments. These three are used interchangeably throughout the course.\nWe can also use .loc to achieve similar results.\nbabynames.loc[babynames[\"Sex\"] == \"F\"].head()\n\n\n\n\n\n\n\n\nState\nSex\nYear\nName\nCount\n\n\n\n\n0\nCA\nF\n1910\nMary\n295\n\n\n1\nCA\nF\n1910\nHelen\n239\n\n\n2\nCA\nF\n1910\nDorothy\n220\n\n\n3\nCA\nF\n1910\nMargaret\n163\n\n\n4\nCA\nF\n1910\nFrances\n134\nBoolean conditions can be combined using various bitwise operators, allowing us to filter results by multiple conditions. In the table below, p and q are boolean arrays or Series.\nWhen combining multiple conditions with logical operators, we surround each individual condition with a set of parenthesis (). This imposes an order of operations on pandas evaluating your logic and can avoid code erroring.\nFor example, if we want to return data on all names with sex \"F\" born before the year 2000, we can write:\nbabynames[(babynames[\"Sex\"] == \"F\") & (babynames[\"Year\"] < 2000)].head()\n\n\n\n\n\n\n\n\nState\nSex\nYear\nName\nCount\n\n\n\n\n0\nCA\nF\n1910\nMary\n295\n\n\n1\nCA\nF\n1910\nHelen\n239\n\n\n2\nCA\nF\n1910\nDorothy\n220\n\n\n3\nCA\nF\n1910\nMargaret\n163\n\n\n4\nCA\nF\n1910\nFrances\n134\nNote that we’re working with Series, so using and in place of &, or or in place | will error.\n# This line of code will raise a ValueError\n# babynames[(babynames[\"Sex\"] == \"F\") and (babynames[\"Year\"] < 2000)].head()\nIf we want to return data on all names with sex \"F\" or all born before the year 2000, we can write:\nbabynames[(babynames[\"Sex\"] == \"F\") | (babynames[\"Year\"] < 2000)].head()\n\n\n\n\n\n\n\n\nState\nSex\nYear\nName\nCount\n\n\n\n\n0\nCA\nF\n1910\nMary\n295\n\n\n1\nCA\nF\n1910\nHelen\n239\n\n\n2\nCA\nF\n1910\nDorothy\n220\n\n\n3\nCA\nF\n1910\nMargaret\n163\n\n\n4\nCA\nF\n1910\nFrances\n134\nBoolean array selection is a useful tool, but can lead to overly verbose code for complex conditions. In the example below, our boolean condition is long enough to extend for several lines of code.\n# Note: The parentheses surrounding the code make it possible to break the code on to multiple lines for readability\n(\n babynames[(babynames[\"Name\"] == \"Bella\") | \n (babynames[\"Name\"] == \"Alex\") |\n (babynames[\"Name\"] == \"Ani\") |\n (babynames[\"Name\"] == \"Lisa\")]\n).head()\n\n\n\n\n\n\n\n\nState\nSex\nYear\nName\nCount\n\n\n\n\n6289\nCA\nF\n1923\nBella\n5\n\n\n7512\nCA\nF\n1925\nBella\n8\n\n\n12368\nCA\nF\n1932\nLisa\n5\n\n\n14741\nCA\nF\n1936\nLisa\n8\n\n\n17084\nCA\nF\n1939\nLisa\n5\nFortunately, pandas provides many alternative methods for constructing boolean filters.\nThe .isin function is one such example. This method evaluates if the values in a Series are contained in a different sequence (list, array, or Series) of values. In the cell below, we achieve equivalent results to the DataFrame above with far more concise code.\nnames = [\"Bella\", \"Alex\", \"Narges\", \"Lisa\"]\nbabynames[\"Name\"].isin(names).head()\n\n0 False\n1 False\n2 False\n3 False\n4 False\nName: Name, dtype: bool\nbabynames[babynames[\"Name\"].isin(names)].head()\n\n\n\n\n\n\n\n\nState\nSex\nYear\nName\nCount\n\n\n\n\n6289\nCA\nF\n1923\nBella\n5\n\n\n7512\nCA\nF\n1925\nBella\n8\n\n\n12368\nCA\nF\n1932\nLisa\n5\n\n\n14741\nCA\nF\n1936\nLisa\n8\n\n\n17084\nCA\nF\n1939\nLisa\n5\nThe function str.startswith can be used to define a filter based on string values in a Series object. It checks to see if string values in a Series start with a particular character.\n# Identify whether names begin with the letter \"N\"\nbabynames[\"Name\"].str.startswith(\"N\").head()\n\n0 False\n1 False\n2 False\n3 False\n4 False\nName: Name, dtype: bool\n# Extracting names that begin with the letter \"N\"\nbabynames[babynames[\"Name\"].str.startswith(\"N\")].head()\n\n\n\n\n\n\n\n\nState\nSex\nYear\nName\nCount\n\n\n\n\n76\nCA\nF\n1910\nNorma\n23\n\n\n83\nCA\nF\n1910\nNellie\n20\n\n\n127\nCA\nF\n1910\nNina\n11\n\n\n198\nCA\nF\n1910\nNora\n6\n\n\n310\nCA\nF\n1911\nNellie\n23", + "crumbs": [ + "3  Pandas II" + ] + }, + { + "objectID": "pandas_2/pandas_2.html#conditional-selection", + "href": "pandas_2/pandas_2.html#conditional-selection", + "title": "3  Pandas II", + "section": "", + "text": "Symbol\nUsage\nMeaning\n\n\n\n\n~\n~p\nReturns negation of p\n\n\n|\np | q\np OR q\n\n\n&\np & q\np AND q\n\n\n^\np ^ q\np XOR q (exclusive or)", + "crumbs": [ + "3  Pandas II" + ] + }, + { + "objectID": "pandas_2/pandas_2.html#adding-removing-and-modifying-columns", + "href": "pandas_2/pandas_2.html#adding-removing-and-modifying-columns", + "title": "3  Pandas II", + "section": "3.2 Adding, Removing, and Modifying Columns", + "text": "3.2 Adding, Removing, and Modifying Columns\nIn many data science tasks, we may need to change the columns contained in our DataFrame in some way. Fortunately, the syntax to do so is fairly straightforward.\nTo add a new column to a DataFrame, we use a syntax similar to that used when accessing an existing column. Specify the name of the new column by writing df[\"column\"], then assign this to a Series or array containing the values that will populate this column.\n\n# Create a Series of the length of each name. \nbabyname_lengths = babynames[\"Name\"].str.len()\n\n# Add a column named \"name_lengths\" that includes the length of each name\nbabynames[\"name_lengths\"] = babyname_lengths\nbabynames.head(5)\n\n\n\n\n\n\n\n\nState\nSex\nYear\nName\nCount\nname_lengths\n\n\n\n\n0\nCA\nF\n1910\nMary\n295\n4\n\n\n1\nCA\nF\n1910\nHelen\n239\n5\n\n\n2\nCA\nF\n1910\nDorothy\n220\n7\n\n\n3\nCA\nF\n1910\nMargaret\n163\n8\n\n\n4\nCA\nF\n1910\nFrances\n134\n7\n\n\n\n\n\n\n\nIf we need to later modify an existing column, we can do so by referencing this column again with the syntax df[\"column\"], then re-assigning it to a new Series or array of the appropriate length.\n\n# Modify the “name_lengths” column to be one less than its original value\nbabynames[\"name_lengths\"] = babynames[\"name_lengths\"] - 1\nbabynames.head()\n\n\n\n\n\n\n\n\nState\nSex\nYear\nName\nCount\nname_lengths\n\n\n\n\n0\nCA\nF\n1910\nMary\n295\n3\n\n\n1\nCA\nF\n1910\nHelen\n239\n4\n\n\n2\nCA\nF\n1910\nDorothy\n220\n6\n\n\n3\nCA\nF\n1910\nMargaret\n163\n7\n\n\n4\nCA\nF\n1910\nFrances\n134\n6\n\n\n\n\n\n\n\nWe can rename a column using the .rename() method. It takes in a dictionary that maps old column names to their new ones.\n\n# Rename “name_lengths” to “Length”\nbabynames = babynames.rename(columns={\"name_lengths\":\"Length\"})\nbabynames.head()\n\n\n\n\n\n\n\n\nState\nSex\nYear\nName\nCount\nLength\n\n\n\n\n0\nCA\nF\n1910\nMary\n295\n3\n\n\n1\nCA\nF\n1910\nHelen\n239\n4\n\n\n2\nCA\nF\n1910\nDorothy\n220\n6\n\n\n3\nCA\nF\n1910\nMargaret\n163\n7\n\n\n4\nCA\nF\n1910\nFrances\n134\n6\n\n\n\n\n\n\n\nIf we want to remove a column or row of a DataFrame, we can call the .drop (documentation) method. Use the axis parameter to specify whether a column or row should be dropped. Unless otherwise specified, pandas will assume that we are dropping a row by default.\n\n# Drop our new \"Length\" column from the DataFrame\nbabynames = babynames.drop(\"Length\", axis=\"columns\")\nbabynames.head(5)\n\n\n\n\n\n\n\n\nState\nSex\nYear\nName\nCount\n\n\n\n\n0\nCA\nF\n1910\nMary\n295\n\n\n1\nCA\nF\n1910\nHelen\n239\n\n\n2\nCA\nF\n1910\nDorothy\n220\n\n\n3\nCA\nF\n1910\nMargaret\n163\n\n\n4\nCA\nF\n1910\nFrances\n134\n\n\n\n\n\n\n\nNotice that we re-assigned babynames to the result of babynames.drop(...). This is a subtle but important point: pandas table operations do not occur in-place. Calling df.drop(...) will output a copy of df with the row/column of interest removed without modifying the original df table.\nIn other words, if we simply call:\n\n# This creates a copy of `babynames` and removes the column \"Name\"...\nbabynames.drop(\"Name\", axis=\"columns\")\n\n# ...but the original `babynames` is unchanged! \n# Notice that the \"Name\" column is still present\nbabynames.head(5)\n\n\n\n\n\n\n\n\nState\nSex\nYear\nName\nCount\n\n\n\n\n0\nCA\nF\n1910\nMary\n295\n\n\n1\nCA\nF\n1910\nHelen\n239\n\n\n2\nCA\nF\n1910\nDorothy\n220\n\n\n3\nCA\nF\n1910\nMargaret\n163\n\n\n4\nCA\nF\n1910\nFrances\n134", + "crumbs": [ + "3  Pandas II" + ] + }, + { + "objectID": "pandas_2/pandas_2.html#useful-utility-functions", + "href": "pandas_2/pandas_2.html#useful-utility-functions", + "title": "3  Pandas II", + "section": "3.3 Useful Utility Functions", + "text": "3.3 Useful Utility Functions\npandas contains an extensive library of functions that can help shorten the process of setting and getting information from its data structures. In the following section, we will give overviews of each of the main utility functions that will help us in Data 100.\nDiscussing all functionality offered by pandas could take an entire semester! We will walk you through the most commonly-used functions and encourage you to explore and experiment on your own.\n\nNumPy and built-in function support\n.shape\n.size\n.describe()\n.sample()\n.value_counts()\n.unique()\n.sort_values()\n\nThe pandas documentation will be a valuable resource in Data 100 and beyond.\n\n3.3.1 NumPy\npandas is designed to work well with NumPy, the framework for array computations you encountered in Data 8. Just about any NumPy function can be applied to pandas DataFrames and Series.\n\n# Pull out the number of babies named Yash each year\nyash_count = babynames[babynames[\"Name\"] == \"Yash\"][\"Count\"]\nyash_count.head()\n\n331824 8\n334114 9\n336390 11\n338773 12\n341387 10\nName: Count, dtype: int64\n\n\n\n# Average number of babies named Yash each year\nnp.mean(yash_count)\n\n17.142857142857142\n\n\n\n# Max number of babies named Yash born in any one year\nnp.max(yash_count)\n\n29\n\n\n\n\n3.3.2 .shape and .size\n.shape and .size are attributes of Series and DataFrames that measure the “amount” of data stored in the structure. Calling .shape returns a tuple containing the number of rows and columns present in the DataFrame or Series. .size is used to find the total number of elements in a structure, equivalent to the number of rows times the number of columns.\nMany functions strictly require the dimensions of the arguments along certain axes to match. Calling these dimension-finding functions is much faster than counting all of the items by hand.\n\n# Return the shape of the DataFrame, in the format (num_rows, num_columns)\nbabynames.shape\n\n(407428, 5)\n\n\n\n# Return the size of the DataFrame, equal to num_rows * num_columns\nbabynames.size\n\n2037140\n\n\n\n\n3.3.3 .describe()\nIf many statistics are required from a DataFrame (minimum value, maximum value, mean value, etc.), then .describe() (documentation) can be used to compute all of them at once.\n\nbabynames.describe()\n\n\n\n\n\n\n\n\nYear\nCount\n\n\n\n\ncount\n407428.000000\n407428.000000\n\n\nmean\n1985.733609\n79.543456\n\n\nstd\n27.007660\n293.698654\n\n\nmin\n1910.000000\n5.000000\n\n\n25%\n1969.000000\n7.000000\n\n\n50%\n1992.000000\n13.000000\n\n\n75%\n2008.000000\n38.000000\n\n\nmax\n2022.000000\n8260.000000\n\n\n\n\n\n\n\nA different set of statistics will be reported if .describe() is called on a Series.\n\nbabynames[\"Sex\"].describe()\n\ncount 407428\nunique 2\ntop F\nfreq 239537\nName: Sex, dtype: object\n\n\n\n\n3.3.4 .sample()\nAs we will see later in the semester, random processes are at the heart of many data science techniques (for example, train-test splits, bootstrapping, and cross-validation). .sample() (documentation) lets us quickly select random entries (a row if called from a DataFrame, or a value if called from a Series).\nBy default, .sample() selects entries without replacement. Pass in the argument replace=True to sample with replacement.\n\n# Sample a single row\nbabynames.sample()\n\n\n\n\n\n\n\n\nState\nSex\nYear\nName\nCount\n\n\n\n\n234881\nCA\nF\n2021\nKhelani\n7\n\n\n\n\n\n\n\nNaturally, this can be chained with other methods and operators (iloc, etc.).\n\n# Sample 5 random rows, and select all columns after column 2\nbabynames.sample(5).iloc[:, 2:]\n\n\n\n\n\n\n\n\nYear\nName\nCount\n\n\n\n\n98030\n1985\nBeatris\n14\n\n\n23304\n1946\nClarice\n11\n\n\n49990\n1964\nIris\n30\n\n\n16618\n1939\nRobin\n29\n\n\n125906\n1993\nKelcey\n10\n\n\n\n\n\n\n\n\n# Randomly sample 4 names from the year 2000, with replacement, and select all columns after column 2\nbabynames[babynames[\"Year\"] == 2000].sample(4, replace = True).iloc[:, 2:]\n\n\n\n\n\n\n\n\nYear\nName\nCount\n\n\n\n\n149143\n2000\nMariah\n534\n\n\n342485\n2000\nIsaac\n1297\n\n\n149650\n2000\nArielle\n59\n\n\n343016\n2000\nDarrell\n40\n\n\n\n\n\n\n\n\n\n3.3.5 .value_counts()\nThe Series.value_counts() (documentation) method counts the number of occurrence of each unique value in a Series. In other words, it counts the number of times each unique value appears. This is often useful for determining the most or least common entries in a Series.\nIn the example below, we can determine the name with the most years in which at least one person has taken that name by counting the number of times each name appears in the \"Name\" column of babynames. Note that the return value is also a Series.\n\nbabynames[\"Name\"].value_counts().head()\n\nName\nJean 223\nFrancis 221\nGuadalupe 218\nJessie 217\nMarion 214\nName: count, dtype: int64\n\n\n\n\n3.3.6 .unique()\nIf we have a Series with many repeated values, then .unique() (documentation) can be used to identify only the unique values. Here we return an array of all the names in babynames.\n\nbabynames[\"Name\"].unique()\n\narray(['Mary', 'Helen', 'Dorothy', ..., 'Zae', 'Zai', 'Zayvier'],\n dtype=object)\n\n\n\n\n3.3.7 .sort_values()\nOrdering a DataFrame can be useful for isolating extreme values. For example, the first 5 entries of a row sorted in descending order (that is, from highest to lowest) are the largest 5 values. .sort_values (documentation) allows us to order a DataFrame or Series by a specified column. We can choose to either receive the rows in ascending order (default) or descending order.\n\n# Sort the \"Count\" column from highest to lowest\nbabynames.sort_values(by=\"Count\", ascending=False).head()\n\n\n\n\n\n\n\n\nState\nSex\nYear\nName\nCount\n\n\n\n\n268041\nCA\nM\n1957\nMichael\n8260\n\n\n267017\nCA\nM\n1956\nMichael\n8258\n\n\n317387\nCA\nM\n1990\nMichael\n8246\n\n\n281850\nCA\nM\n1969\nMichael\n8245\n\n\n283146\nCA\nM\n1970\nMichael\n8196\n\n\n\n\n\n\n\nUnlike when calling .value_counts() on a DataFrame, we do not need to explicitly specify the column used for sorting when calling .value_counts() on a Series. We can still specify the ordering paradigm – that is, whether values are sorted in ascending or descending order.\n\n# Sort the \"Name\" Series alphabetically\nbabynames[\"Name\"].sort_values(ascending=True).head()\n\n366001 Aadan\n384005 Aadan\n369120 Aadan\n398211 Aadarsh\n370306 Aaden\nName: Name, dtype: object", + "crumbs": [ + "3  Pandas II" + ] + }, + { + "objectID": "pandas_2/pandas_2.html#parting-note", + "href": "pandas_2/pandas_2.html#parting-note", + "title": "3  Pandas II", + "section": "3.4 Parting Note", + "text": "3.4 Parting Note\nManipulating DataFrames is not a skill that is mastered in just one day. Due to the flexibility of pandas, there are many different ways to get from point A to point B. We recommend trying multiple different ways to solve the same problem to gain even more practice and reach that point of mastery sooner.\nNext, we will start digging deeper into the mechanics behind grouping data.", + "crumbs": [ + "3  Pandas II" + ] } ] \ No newline at end of file