From 533957e64d527d7b16cdcd2dd565dd4f9811501b Mon Sep 17 00:00:00 2001 From: vspenubarthi Date: Wed, 31 Jul 2019 11:33:04 -0400 Subject: [PATCH 01/14] Added CSV file handling in WorkingWithFiles --- .../Module5_OddsAndEnds/WorkingWithFiles.md | 96 ++++++++++++++++++ .../Module5_OddsAndEnds/pics/Pandas_CSV.jpg | Bin 0 -> 119241 bytes 2 files changed, 96 insertions(+) create mode 100644 Python/Module5_OddsAndEnds/pics/Pandas_CSV.jpg diff --git a/Python/Module5_OddsAndEnds/WorkingWithFiles.md b/Python/Module5_OddsAndEnds/WorkingWithFiles.md index e8fce932..19b7bf02 100644 --- a/Python/Module5_OddsAndEnds/WorkingWithFiles.md +++ b/Python/Module5_OddsAndEnds/WorkingWithFiles.md @@ -249,6 +249,102 @@ with open("a_poem.txt", mode="r") as my_open_file: ``` + +## Working with Comma Seperated Value Files + +Comma Seperated Value (CSV) files are commonly used to store data that you might typically find in a table. These files can be formatted in many ways, but the typical format is to have each of the column values in the table be separated by commas while having a newline separate each row. Suppose we have the following table of test scores: + +| | Exam 1 (%) | Exam 2 (%) | +| ------------- |:-------------:| -----:| +| Ashley | $93$ | $95$ | +| Brad | $84$ | $100$ | +| Cassie | $99$ | $87$ | + +This table, which sourced for Module 3 of Python Like You Mean It, depicts the test scores of three students across 2 exams. Here is what the corresponding CSV file might look like: + +```python +name,exam one score,exam two score +Ashley,93,95 +Brad,84,100 +Cassie,99,87 +``` +In addition to the fact that the first line typically contains headers columns, you are also allowed to have spaces within each of columns as well. + +
+ +**Note**: + +It is not guaranteed that all CSV files are actually comma separated. Non-standard CSV files will typically come with instructions on how the data is organized. In general, it is a good practice to open up the CSV file (using Notepad or a regular text editor) and look at the first few lines to get a sense of how it is organized (unless the file is too large). +
+ +### How to parse CSVs with Numpy + +We will first look into parsing and storing CSV data using our favorite package: Numpy! +```python +from numpy import genfromtxt # genfromtxt() allows for easy parsing of CSVs +my_data = genfromtxt(r"path_to_csv/file.csv", delimiter=',') +``` +`genfromtxt()` takes in CSV file path and delimiter (what is used to split the data, typically comma for CSV). +Let's check some properties: +```python +>>> type(my_data) +numpy.ndarray + +>>> my_data.shape +(numSamples, numAttributesPerSample) + +#Let's look at the actual data +>>> my_data +array([[ nan, nan, nan, ..., nan, nan, nan], + [ nan, -99.9 , -99.9 , ..., -99.9 , -99.9 , -99.9 ], + [ nan, 0.875, 1.39 , ..., 4.506, -99.9 , -99.9 ], + ..., + [ nan, 2.157, 3.43 , ..., 12.89 , 97. , 21.95 ], + [ nan, 2.087, 2.84 , ..., 10.963, 92. , 21.95 ], + [ nan, 1.926, 2.98 , ..., 12.228, 84. , 21.95 ]]) +``` +You may notice that there are some `nan` values present when we look at this perticular set of data. Typically, if there are non-numerical values in the file, such as headers and dates, importing it into a Numpy array will turn those values into `nan`. + +### How to parse CSVs with Pandas + +A really popular library for parsing through CSVs is the [Pandas](https://pandas.pydata.org/pandas-docs/stable/index.html "Pandas Documentation") library. Here is a quick way to parse through a CSV using Pandas: +```Python +import pandas as pd +my_data =pd.read_csv(r"path_to_csv/file.csv", sep=',',header=None) +``` +That's it! The method `read_csv()` imports the CSV into the variable `my_data`. This method has similar input parameters to `genfromtxt()` and many extra optional parameters as well. Look at the docstring to see more. + + Let's look at some properties of an [example file](https://www.kaggle.com/account/login?returnUrl=%2Fjolasa%2Fwaves-measuring-buoys-data-mooloolaba%2Fversion%2F1 "Kaggle Dataset") that has data related to ocean waves: + +```Python +>>> type(my_data) +pandas.core.frame.DataFrame #Notice that this is a custom type + +>>> my_data.shape +(numSamples, numAttributesPerSample) + +>>> my_data.values #This is how we access the values as an array +array([['Date/Time', 'Hs', 'Hmax', ..., 'Tp', 'Peak Direction', 'SST'], + ['01/01/2017 00:00', '-99.9', '-99.9', ..., '-99.9', '-99.9', + '-99.9'], + ['01/01/2017 00:30', '0.875', '1.39', ..., '4.506', '-99.9', + '-99.9'], + ..., + ['30/06/2019 22:30', '2.157', '3.43', ..., '12.89', '97', '21.95'], + ['30/06/2019 23:00', '2.087', '2.84', ..., '10.963', '92', + '21.95'], + ['30/06/2019 23:30', '1.926', '2.98', ..., '12.228', '84', + '21.95']], dtype=object) +``` +One of the coolest features of Pandas is how it nicely organizes the parsed CSV data for visualization. Here is how `my_data` is displayed in a jupyter notebook: +```Python +>>> my_data[0:21] #Prints out first 20 values in nice format +``` +![Memory consumption figure](pics/Pandas_CSV.jpg) + +One of the main advantages of Pandas is that it **treats all the data as strings**, while Numpy only deals with numerical values. This allows Pandas to store information such as headers and date, while Numpy cannot. Read the [Pandas documentation](https://pandas.pydata.org/pandas-docs/stable/index.html "Documentation Link") for more information. + + ## Globbing for Files diff --git a/Python/Module5_OddsAndEnds/pics/Pandas_CSV.jpg b/Python/Module5_OddsAndEnds/pics/Pandas_CSV.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f0f3aeb1afdf2d32f849987542e341268542cb5b GIT binary patch literal 119241 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�}-UBf46_W_folQd->(a>pDP;O*A}9gNfC(-| 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%0AG|# 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 literal 0 HcmV?d00001 From 828a139e4cf10a7a86e61d9efa7e70499950a85b Mon Sep 17 00:00:00 2001 From: vspenubarthi Date: Mon, 27 Jul 2020 13:38:03 -0400 Subject: [PATCH 02/14] Revisions to CSV portion...just a bit late --- .../Module5_OddsAndEnds/WorkingWithFiles.md | 51 ++++++++++++------- 1 file changed, 32 insertions(+), 19 deletions(-) diff --git a/Python/Module5_OddsAndEnds/WorkingWithFiles.md b/Python/Module5_OddsAndEnds/WorkingWithFiles.md index 19b7bf02..ffc67ad8 100644 --- a/Python/Module5_OddsAndEnds/WorkingWithFiles.md +++ b/Python/Module5_OddsAndEnds/WorkingWithFiles.md @@ -252,7 +252,9 @@ with open("a_poem.txt", mode="r") as my_open_file: ## Working with Comma Seperated Value Files -Comma Seperated Value (CSV) files are commonly used to store data that you might typically find in a table. These files can be formatted in many ways, but the typical format is to have each of the column values in the table be separated by commas while having a newline separate each row. Suppose we have the following table of test scores: +Comma Seperated Value (CSV) files are commonly used to store data that you might typically find in a table. +These files can be formatted in many ways, but the typical format is to have each of the column values in the table be separated by commas while having a newline separate each row. +Suppose we have the following table of test scores: | | Exam 1 (%) | Exam 2 (%) | | ------------- |:-------------:| -----:| @@ -260,7 +262,8 @@ Comma Seperated Value (CSV) files are commonly used to store data that you might | Brad | $84$ | $100$ | | Cassie | $99$ | $87$ | -This table, which sourced for Module 3 of Python Like You Mean It, depicts the test scores of three students across 2 exams. Here is what the corresponding CSV file might look like: +This table depicts the test scores of three students across 2 exams. +Here is what the corresponding CSV file might look like: ```python name,exam one score,exam two score @@ -268,30 +271,36 @@ Ashley,93,95 Brad,84,100 Cassie,99,87 ``` -In addition to the fact that the first line typically contains headers columns, you are also allowed to have spaces within each of columns as well. +In addition to the fact that the first line typically contains a header, you are also allowed to have spaces within each of columns as well.
**Note**: -It is not guaranteed that all CSV files are actually comma separated. Non-standard CSV files will typically come with instructions on how the data is organized. In general, it is a good practice to open up the CSV file (using Notepad or a regular text editor) and look at the first few lines to get a sense of how it is organized (unless the file is too large). +It is not guaranteed that all CSV files are actually comma separated. +Non-standard CSV files will typically come with instructions on how the data is organized. +In general, it is a good practice to open up the CSV file and look at the first few lines to get a sense of how it is organized (unless the file is too large).
-### How to parse CSVs with Numpy +### How to parse CSVs with NumPy -We will first look into parsing and storing CSV data using our favorite package: Numpy! +We will first look into parsing and storing CSV data using our favorite package: `numpy`! + +To demonstrate how importing a CSV works, we will try to import [a costal waves dataset](https://www.kaggle.com/jolasa/waves-measuring-buoys-data-mooloolaba/data) from Kaggle. +After you extract the *.csv* from the *.zip*, rename it to *costal_dataset.csv*. ```python from numpy import genfromtxt # genfromtxt() allows for easy parsing of CSVs -my_data = genfromtxt(r"path_to_csv/file.csv", delimiter=',') +my_data = genfromtxt(r"./Downloads/costal_dataset.csv", delimiter=',') ``` -`genfromtxt()` takes in CSV file path and delimiter (what is used to split the data, typically comma for CSV). -Let's check some properties: +`genfromtxt()` takes in CSV file path and delimiter (the character used to split the data, typically comma for CSV). +Let's check out some properties of the CSV: + ```python >>> type(my_data) numpy.ndarray >>> my_data.shape -(numSamples, numAttributesPerSample) +(43729, 7) #Let's look at the actual data >>> my_data @@ -303,25 +312,29 @@ array([[ nan, nan, nan, ..., nan, nan, nan], [ nan, 2.087, 2.84 , ..., 10.963, 92. , 21.95 ], [ nan, 1.926, 2.98 , ..., 12.228, 84. , 21.95 ]]) ``` -You may notice that there are some `nan` values present when we look at this perticular set of data. Typically, if there are non-numerical values in the file, such as headers and dates, importing it into a Numpy array will turn those values into `nan`. +You may notice that there are some `nan` values present when we look at this perticular set of data. +Typically, if there are non-numerical values in the file, such as headers and dates, importing it into a NumPy array will turn those values into `nan`. ### How to parse CSVs with Pandas -A really popular library for parsing through CSVs is the [Pandas](https://pandas.pydata.org/pandas-docs/stable/index.html "Pandas Documentation") library. Here is a quick way to parse through a CSV using Pandas: +A really popular library for parsing CSVs is the [Pandas](https://pandas.pydata.org/pandas-docs/stable/index.html "Pandas Documentation") library. Here is a quick way to parse a CSV using Pandas: ```Python import pandas as pd -my_data =pd.read_csv(r"path_to_csv/file.csv", sep=',',header=None) +my_data =pd.read_csv(r"./Downloads/costal_dataset.csv", sep=',',header=None) ``` -That's it! The method `read_csv()` imports the CSV into the variable `my_data`. This method has similar input parameters to `genfromtxt()` and many extra optional parameters as well. Look at the docstring to see more. +That's it! +The method `read_csv()` imports the CSV into the variable `my_data`. +This method has similar input parameters to `genfromtxt()` and many extra optional parameters as well. +Look at the docstring for more information. - Let's look at some properties of an [example file](https://www.kaggle.com/account/login?returnUrl=%2Fjolasa%2Fwaves-measuring-buoys-data-mooloolaba%2Fversion%2F1 "Kaggle Dataset") that has data related to ocean waves: + Let's parse the same [ocean waves csv](https://www.kaggle.com/jolasa/waves-measuring-buoys-data-mooloolaba/data) from before but with Pandas instead of NumPy: ```Python >>> type(my_data) pandas.core.frame.DataFrame #Notice that this is a custom type >>> my_data.shape -(numSamples, numAttributesPerSample) +(43729, 7) >>> my_data.values #This is how we access the values as an array array([['Date/Time', 'Hs', 'Hmax', ..., 'Tp', 'Peak Direction', 'SST'], @@ -336,13 +349,13 @@ array([['Date/Time', 'Hs', 'Hmax', ..., 'Tp', 'Peak Direction', 'SST'], ['30/06/2019 23:30', '1.926', '2.98', ..., '12.228', '84', '21.95']], dtype=object) ``` -One of the coolest features of Pandas is how it nicely organizes the parsed CSV data for visualization. Here is how `my_data` is displayed in a jupyter notebook: +One of the coolest features of Pandas is how it nicely organizes the parsed CSV data for visualization. Here is how `my_data` is displayed in a Jupyter Notebook: ```Python ->>> my_data[0:21] #Prints out first 20 values in nice format +my_data[0:21] #Prints out first 20 values in nice format ``` ![Memory consumption figure](pics/Pandas_CSV.jpg) -One of the main advantages of Pandas is that it **treats all the data as strings**, while Numpy only deals with numerical values. This allows Pandas to store information such as headers and date, while Numpy cannot. Read the [Pandas documentation](https://pandas.pydata.org/pandas-docs/stable/index.html "Documentation Link") for more information. +One of the main advantages of Pandas is that it **treats all the data as strings**, while NumPy only deals with numerical values. This allows Pandas to store information such as headers and date, while NumPy cannot. Read the [Pandas documentation](https://pandas.pydata.org/pandas-docs/stable/index.html "Documentation Link") for more information. From cf9ac6600ddb8de0f7ae16810f48e4d84f7ccaa7 Mon Sep 17 00:00:00 2001 From: vspenubarthi Date: Mon, 27 Jul 2020 13:40:09 -0400 Subject: [PATCH 03/14] Moved sentences to new lines --- Python/Module5_OddsAndEnds/WorkingWithFiles.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Python/Module5_OddsAndEnds/WorkingWithFiles.md b/Python/Module5_OddsAndEnds/WorkingWithFiles.md index ffc67ad8..6b314725 100644 --- a/Python/Module5_OddsAndEnds/WorkingWithFiles.md +++ b/Python/Module5_OddsAndEnds/WorkingWithFiles.md @@ -349,13 +349,17 @@ array([['Date/Time', 'Hs', 'Hmax', ..., 'Tp', 'Peak Direction', 'SST'], ['30/06/2019 23:30', '1.926', '2.98', ..., '12.228', '84', '21.95']], dtype=object) ``` -One of the coolest features of Pandas is how it nicely organizes the parsed CSV data for visualization. Here is how `my_data` is displayed in a Jupyter Notebook: +One of the coolest features of Pandas is how it nicely organizes the parsed CSV data for visualization. +Here is how `my_data` is displayed in a Jupyter Notebook: + ```Python my_data[0:21] #Prints out first 20 values in nice format ``` -![Memory consumption figure](pics/Pandas_CSV.jpg) +![Pandas Parsed Figure](pics/Pandas_CSV.jpg) -One of the main advantages of Pandas is that it **treats all the data as strings**, while NumPy only deals with numerical values. This allows Pandas to store information such as headers and date, while NumPy cannot. Read the [Pandas documentation](https://pandas.pydata.org/pandas-docs/stable/index.html "Documentation Link") for more information. +One of the main advantages of Pandas is that it **treats all the data as strings**, while NumPy only deals with numerical values. +This allows Pandas to store information such as headers and date, while NumPy cannot. +Read the [Pandas documentation](https://pandas.pydata.org/pandas-docs/stable/index.html "Documentation Link") for more information. From 031d37a1218e472190e1f9a56b7af4858b7d4787 Mon Sep 17 00:00:00 2001 From: "Vishnu S. Penubarthi" <35707033+vspenubarthi@users.noreply.github.com> Date: Mon, 27 Jul 2020 14:08:50 -0400 Subject: [PATCH 04/14] Update Python/Module5_OddsAndEnds/WorkingWithFiles.md Co-authored-by: David Mascharka --- Python/Module5_OddsAndEnds/WorkingWithFiles.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Python/Module5_OddsAndEnds/WorkingWithFiles.md b/Python/Module5_OddsAndEnds/WorkingWithFiles.md index 6b314725..b8dda3ff 100644 --- a/Python/Module5_OddsAndEnds/WorkingWithFiles.md +++ b/Python/Module5_OddsAndEnds/WorkingWithFiles.md @@ -286,7 +286,7 @@ In general, it is a good practice to open up the CSV file and look at the first We will first look into parsing and storing CSV data using our favorite package: `numpy`! -To demonstrate how importing a CSV works, we will try to import [a costal waves dataset](https://www.kaggle.com/jolasa/waves-measuring-buoys-data-mooloolaba/data) from Kaggle. +To demonstrate how importing a CSV works, we will try to import [a coastal waves dataset](https://www.kaggle.com/jolasa/waves-measuring-buoys-data-mooloolaba/data) from Kaggle. After you extract the *.csv* from the *.zip*, rename it to *costal_dataset.csv*. ```python from numpy import genfromtxt # genfromtxt() allows for easy parsing of CSVs @@ -570,4 +570,3 @@ Write a glob pattern for each of the following prompts - Any file with an odd number in its name (answer: `*[13579]*`) - All txt files that have the letters 'q' or 'z' in them (answer: `*[qz]*.txt`) - From 5e5ef14ade03711a737d03b1bc04ccee882a8e1c Mon Sep 17 00:00:00 2001 From: "Vishnu S. Penubarthi" <35707033+vspenubarthi@users.noreply.github.com> Date: Mon, 27 Jul 2020 14:09:02 -0400 Subject: [PATCH 05/14] Update Python/Module5_OddsAndEnds/WorkingWithFiles.md Co-authored-by: David Mascharka --- Python/Module5_OddsAndEnds/WorkingWithFiles.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Python/Module5_OddsAndEnds/WorkingWithFiles.md b/Python/Module5_OddsAndEnds/WorkingWithFiles.md index b8dda3ff..97fa1624 100644 --- a/Python/Module5_OddsAndEnds/WorkingWithFiles.md +++ b/Python/Module5_OddsAndEnds/WorkingWithFiles.md @@ -287,7 +287,7 @@ In general, it is a good practice to open up the CSV file and look at the first We will first look into parsing and storing CSV data using our favorite package: `numpy`! To demonstrate how importing a CSV works, we will try to import [a coastal waves dataset](https://www.kaggle.com/jolasa/waves-measuring-buoys-data-mooloolaba/data) from Kaggle. -After you extract the *.csv* from the *.zip*, rename it to *costal_dataset.csv*. +After you extract the *.csv* from the *.zip*, rename it to *coastal_dataset.csv*. ```python from numpy import genfromtxt # genfromtxt() allows for easy parsing of CSVs my_data = genfromtxt(r"./Downloads/costal_dataset.csv", delimiter=',') From 6f7529284ec70355e3d19ea41e84c75229657fe2 Mon Sep 17 00:00:00 2001 From: "Vishnu S. Penubarthi" <35707033+vspenubarthi@users.noreply.github.com> Date: Mon, 27 Jul 2020 14:09:10 -0400 Subject: [PATCH 06/14] Update Python/Module5_OddsAndEnds/WorkingWithFiles.md Co-authored-by: David Mascharka --- Python/Module5_OddsAndEnds/WorkingWithFiles.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Python/Module5_OddsAndEnds/WorkingWithFiles.md b/Python/Module5_OddsAndEnds/WorkingWithFiles.md index 97fa1624..840bde3a 100644 --- a/Python/Module5_OddsAndEnds/WorkingWithFiles.md +++ b/Python/Module5_OddsAndEnds/WorkingWithFiles.md @@ -290,7 +290,7 @@ To demonstrate how importing a CSV works, we will try to import [a coastal waves After you extract the *.csv* from the *.zip*, rename it to *coastal_dataset.csv*. ```python from numpy import genfromtxt # genfromtxt() allows for easy parsing of CSVs -my_data = genfromtxt(r"./Downloads/costal_dataset.csv", delimiter=',') +my_data = genfromtxt(r"./Downloads/coastal_dataset.csv", delimiter=',') ``` `genfromtxt()` takes in CSV file path and delimiter (the character used to split the data, typically comma for CSV). Let's check out some properties of the CSV: From 8bcfd6d8484ccc4b7acd9d63d459783787f373b7 Mon Sep 17 00:00:00 2001 From: "Vishnu S. Penubarthi" <35707033+vspenubarthi@users.noreply.github.com> Date: Mon, 27 Jul 2020 14:09:18 -0400 Subject: [PATCH 07/14] Update Python/Module5_OddsAndEnds/WorkingWithFiles.md Co-authored-by: David Mascharka --- Python/Module5_OddsAndEnds/WorkingWithFiles.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Python/Module5_OddsAndEnds/WorkingWithFiles.md b/Python/Module5_OddsAndEnds/WorkingWithFiles.md index 840bde3a..d71a295b 100644 --- a/Python/Module5_OddsAndEnds/WorkingWithFiles.md +++ b/Python/Module5_OddsAndEnds/WorkingWithFiles.md @@ -293,7 +293,7 @@ from numpy import genfromtxt # genfromtxt() allows for easy parsing of CSVs my_data = genfromtxt(r"./Downloads/coastal_dataset.csv", delimiter=',') ``` `genfromtxt()` takes in CSV file path and delimiter (the character used to split the data, typically comma for CSV). -Let's check out some properties of the CSV: +Let's check out some properties of the data: ```python >>> type(my_data) From 45a4aa033b6350f5c2755cbe434e3bef9b0cc4f0 Mon Sep 17 00:00:00 2001 From: "Vishnu S. Penubarthi" <35707033+vspenubarthi@users.noreply.github.com> Date: Mon, 27 Jul 2020 14:09:26 -0400 Subject: [PATCH 08/14] Update Python/Module5_OddsAndEnds/WorkingWithFiles.md Co-authored-by: David Mascharka --- Python/Module5_OddsAndEnds/WorkingWithFiles.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Python/Module5_OddsAndEnds/WorkingWithFiles.md b/Python/Module5_OddsAndEnds/WorkingWithFiles.md index d71a295b..8f2fb302 100644 --- a/Python/Module5_OddsAndEnds/WorkingWithFiles.md +++ b/Python/Module5_OddsAndEnds/WorkingWithFiles.md @@ -292,7 +292,7 @@ After you extract the *.csv* from the *.zip*, rename it to *coastal_dataset.csv* from numpy import genfromtxt # genfromtxt() allows for easy parsing of CSVs my_data = genfromtxt(r"./Downloads/coastal_dataset.csv", delimiter=',') ``` -`genfromtxt()` takes in CSV file path and delimiter (the character used to split the data, typically comma for CSV). +`genfromtxt()` takes in a CSV file path and delimiter (the character used to split the data, typically comma for CSV). Let's check out some properties of the data: ```python From f4e3310cdc6082560b084a270bee111fd11bab09 Mon Sep 17 00:00:00 2001 From: "Vishnu S. Penubarthi" <35707033+vspenubarthi@users.noreply.github.com> Date: Mon, 27 Jul 2020 14:09:38 -0400 Subject: [PATCH 09/14] Update Python/Module5_OddsAndEnds/WorkingWithFiles.md Co-authored-by: David Mascharka --- Python/Module5_OddsAndEnds/WorkingWithFiles.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Python/Module5_OddsAndEnds/WorkingWithFiles.md b/Python/Module5_OddsAndEnds/WorkingWithFiles.md index 8f2fb302..6eb78315 100644 --- a/Python/Module5_OddsAndEnds/WorkingWithFiles.md +++ b/Python/Module5_OddsAndEnds/WorkingWithFiles.md @@ -320,7 +320,7 @@ Typically, if there are non-numerical values in the file, such as headers and da A really popular library for parsing CSVs is the [Pandas](https://pandas.pydata.org/pandas-docs/stable/index.html "Pandas Documentation") library. Here is a quick way to parse a CSV using Pandas: ```Python import pandas as pd -my_data =pd.read_csv(r"./Downloads/costal_dataset.csv", sep=',',header=None) +my_data = pd.read_csv(r"./Downloads/coastal_dataset.csv", sep=',', header=None) ``` That's it! The method `read_csv()` imports the CSV into the variable `my_data`. From 2b7f183a65dc202db863924ebd426664c650ccb3 Mon Sep 17 00:00:00 2001 From: "Vishnu S. Penubarthi" <35707033+vspenubarthi@users.noreply.github.com> Date: Mon, 27 Jul 2020 14:09:57 -0400 Subject: [PATCH 10/14] Update Python/Module5_OddsAndEnds/WorkingWithFiles.md Co-authored-by: David Mascharka --- Python/Module5_OddsAndEnds/WorkingWithFiles.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Python/Module5_OddsAndEnds/WorkingWithFiles.md b/Python/Module5_OddsAndEnds/WorkingWithFiles.md index 6eb78315..4c684c00 100644 --- a/Python/Module5_OddsAndEnds/WorkingWithFiles.md +++ b/Python/Module5_OddsAndEnds/WorkingWithFiles.md @@ -358,7 +358,7 @@ my_data[0:21] #Prints out first 20 values in nice format ![Pandas Parsed Figure](pics/Pandas_CSV.jpg) One of the main advantages of Pandas is that it **treats all the data as strings**, while NumPy only deals with numerical values. -This allows Pandas to store information such as headers and date, while NumPy cannot. +This allows Pandas to store information such as headers and dates, while NumPy cannot. Read the [Pandas documentation](https://pandas.pydata.org/pandas-docs/stable/index.html "Documentation Link") for more information. From fa73ddab16713645eec5684ae642f7d985be383a Mon Sep 17 00:00:00 2001 From: "Vishnu S. Penubarthi" <35707033+vspenubarthi@users.noreply.github.com> Date: Mon, 27 Jul 2020 14:10:04 -0400 Subject: [PATCH 11/14] Update Python/Module5_OddsAndEnds/WorkingWithFiles.md Co-authored-by: David Mascharka --- Python/Module5_OddsAndEnds/WorkingWithFiles.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Python/Module5_OddsAndEnds/WorkingWithFiles.md b/Python/Module5_OddsAndEnds/WorkingWithFiles.md index 4c684c00..fbdd39f9 100644 --- a/Python/Module5_OddsAndEnds/WorkingWithFiles.md +++ b/Python/Module5_OddsAndEnds/WorkingWithFiles.md @@ -353,7 +353,7 @@ One of the coolest features of Pandas is how it nicely organizes the parsed CSV Here is how `my_data` is displayed in a Jupyter Notebook: ```Python -my_data[0:21] #Prints out first 20 values in nice format +my_data[0:21] # Prints out first 20 values in nice format ``` ![Pandas Parsed Figure](pics/Pandas_CSV.jpg) From fbdbca5d8b85cdb6c341bada87538ed80e071e1e Mon Sep 17 00:00:00 2001 From: "Vishnu S. Penubarthi" <35707033+vspenubarthi@users.noreply.github.com> Date: Mon, 27 Jul 2020 14:10:13 -0400 Subject: [PATCH 12/14] Update Python/Module5_OddsAndEnds/WorkingWithFiles.md Co-authored-by: David Mascharka --- Python/Module5_OddsAndEnds/WorkingWithFiles.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Python/Module5_OddsAndEnds/WorkingWithFiles.md b/Python/Module5_OddsAndEnds/WorkingWithFiles.md index fbdd39f9..d6a78933 100644 --- a/Python/Module5_OddsAndEnds/WorkingWithFiles.md +++ b/Python/Module5_OddsAndEnds/WorkingWithFiles.md @@ -336,7 +336,7 @@ pandas.core.frame.DataFrame #Notice that this is a custom type >>> my_data.shape (43729, 7) ->>> my_data.values #This is how we access the values as an array +>>> my_data.values # This is how we access the values as an array array([['Date/Time', 'Hs', 'Hmax', ..., 'Tp', 'Peak Direction', 'SST'], ['01/01/2017 00:00', '-99.9', '-99.9', ..., '-99.9', '-99.9', '-99.9'], From 8b38745511d00e2193c06357387d455ed3b314d8 Mon Sep 17 00:00:00 2001 From: "Vishnu S. Penubarthi" <35707033+vspenubarthi@users.noreply.github.com> Date: Mon, 27 Jul 2020 14:10:20 -0400 Subject: [PATCH 13/14] Update Python/Module5_OddsAndEnds/WorkingWithFiles.md Co-authored-by: David Mascharka --- Python/Module5_OddsAndEnds/WorkingWithFiles.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Python/Module5_OddsAndEnds/WorkingWithFiles.md b/Python/Module5_OddsAndEnds/WorkingWithFiles.md index d6a78933..1793ee77 100644 --- a/Python/Module5_OddsAndEnds/WorkingWithFiles.md +++ b/Python/Module5_OddsAndEnds/WorkingWithFiles.md @@ -331,7 +331,7 @@ Look at the docstring for more information. ```Python >>> type(my_data) -pandas.core.frame.DataFrame #Notice that this is a custom type +pandas.core.frame.DataFrame # Notice that this is a custom type >>> my_data.shape (43729, 7) From c784bf16583accfdddf86eb3ae5a798ac53187f8 Mon Sep 17 00:00:00 2001 From: "Vishnu S. Penubarthi" <35707033+vspenubarthi@users.noreply.github.com> Date: Mon, 27 Jul 2020 14:10:27 -0400 Subject: [PATCH 14/14] Update Python/Module5_OddsAndEnds/WorkingWithFiles.md Co-authored-by: David Mascharka --- Python/Module5_OddsAndEnds/WorkingWithFiles.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Python/Module5_OddsAndEnds/WorkingWithFiles.md b/Python/Module5_OddsAndEnds/WorkingWithFiles.md index 1793ee77..28496b63 100644 --- a/Python/Module5_OddsAndEnds/WorkingWithFiles.md +++ b/Python/Module5_OddsAndEnds/WorkingWithFiles.md @@ -323,7 +323,7 @@ import pandas as pd my_data = pd.read_csv(r"./Downloads/coastal_dataset.csv", sep=',', header=None) ``` That's it! -The method `read_csv()` imports the CSV into the variable `my_data`. +The method `read_csv()` loads the contents of the CSV into the variable `my_data`. This method has similar input parameters to `genfromtxt()` and many extra optional parameters as well. Look at the docstring for more information.