{
  "version": 3,
  "sources": ["ssg:https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js"],
  "sourcesContent": ["import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{addPropertyControls,ControlType,Link}from\"framer\";import*as React from\"react\";/**\n * @framerRecordIdKey id\n * @framerSlug V8PWfbvT8\n * @framerData\n */ const data=[{Djh5_J2Mt:\"Apps\",id:\"ZYvxBsnae\",iP8mvmvMM:\"2023-03-05T00:00:00.000Z\",KbGlbG3Yd:/*#__PURE__*/ _jsxs(React.Fragment,{children:[/*#__PURE__*/ _jsxs(\"p\",{children:[\"Are you looking for a productivity app that will help you manage your goals, organize your life, and build powerful habits? Look no further than \",/*#__PURE__*/ _jsx(Link,{href:\"https://timestripe.com/\",openInNewTab:false,smoothScroll:false,children:/*#__PURE__*/ _jsx(\"a\",{children:\"Timestripe\"})}),\"! I recently started using this app and I'm loving it. It goes beyond the typical calendar and productivity app, offering multiple planning layouts and tools to help you stay on track.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"br\",{}),\"Timestripe is a productivity app that helps you manage your goals, organize your life, and build powerful habits. It has multiple planning layouts and tools to help you stay on track and achieve your goals.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"br\",{}),\"The app has a simple and intuitive interface that makes it easy to use. You can create tasks, set deadlines, and track your progress. You can also set reminders to help you stay on top of your tasks.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"br\",{}),\"Timestripe also has a habit tracker that allows you to track your progress and stay motivated. You can set goals and track your progress over time. This feature is great for helping you stay on track and reach your goals.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"br\",{}),\"Timestripe also has a calendar view that allows you to easily view your tasks and deadlines. You can also add notes and reminders to help you stay organized.\"]}),/*#__PURE__*/ _jsx(\"p\",{children:\"I started using Timestripe a couple months ago with a free account, and I'm already starting to think that I need to upgrade to the Pro version in order to add even more content to my boards. I'm going to give it a few weeks to see how it goes, and I'll be sure to update you on my progress.I used the app with a free account and now starting to think that I need a Pro verion to be able to add even more content to my boards. Will give you an update on how it goes in a few weeks.\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"br\",{}),\"Overall, Timestripe is a great app for staying organized and productive. It has multiple planning layouts and tools to help you manage your goals and stay on track. It also has a habit tracker and calendar view to help you stay motivated and organized. If you\u2019re looking for a way to stay organized and productive, Timestripe is the perfect app for you! And you can try a lot of its features using free account.\"]})]}),qmKEIZQOx:\"rgb(0, 153, 255)\",V8PWfbvT8:\"timestripe-my-new-favourite-productivity-app\",vny2uxJff:{alt:\"\",src:new URL(\"assets/a9UsPqqg2uJisvOfq5TWgcWu8UE.jpeg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,srcSet:`${new URL(\"assets/512/a9UsPqqg2uJisvOfq5TWgcWu8UE.jpeg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 512w, ${new URL(\"assets/1024/a9UsPqqg2uJisvOfq5TWgcWu8UE.jpeg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 1024w, ${new URL(\"assets/a9UsPqqg2uJisvOfq5TWgcWu8UE.jpeg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 1360w`},ZckEhR3V3:\"Timestripe - my new favourite productivity app\"},{Djh5_J2Mt:\"Guides\",id:\"b1xQ3G_a4\",iP8mvmvMM:\"2023-02-02T00:00:00.000Z\",KbGlbG3Yd:/*#__PURE__*/ _jsxs(React.Fragment,{children:[/*#__PURE__*/ _jsxs(\"p\",{children:[\"If you\u2019re a data scientist or analyst, you know how important it is to be able to extract data from websites. Fortunately, Python makes it easy to do this with the Pandas library. In this blog post, we\u2019ll look at how to scrape tables from websites in Python using Pandas \",/*#__PURE__*/ _jsx(\"code\",{children:\"pd.read_html()\"}),\".\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"The \",/*#__PURE__*/ _jsx(Link,{href:\"https://pandas.pydata.org/docs/reference/api/pandas.read_html.html\",openInNewTab:false,smoothScroll:false,children:/*#__PURE__*/ _jsx(\"a\",{children:\"Pandas read_html() function\"})}),\" is an efficient and convenient way to convert an HTML table into a Pandas DataFrame. This tool can be beneficial for quickly importing tables from various websites without having to figure out how to scrape the HTML. Utilizing Pandas read_html is simple and works well with uncomplicated tables, such as those on Wikipedia pages. However, there can be some challenges when using this function on websites that do not welcome scraping and with its formatting.\"]}),/*#__PURE__*/ _jsx(\"p\",{children:\"The pd.read_html() function takes a URL as an argument and returns a list of Dataframe objects, each of which contains the data from a single table. To use it, you will need to import the Pandas library.\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"import pandas as pd\"})}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Once you have imported Pandas, you can use the read_html() function to extract tables from a website. For example, if you wanted to extract tables from the \",/*#__PURE__*/ _jsx(Link,{href:\"https://en.wikipedia.org/wiki/2020_Summer_Olympics\",openInNewTab:false,smoothScroll:false,children:/*#__PURE__*/ _jsx(\"a\",{children:\"Wikipedia page for the 2020 Summer Olympics\"})}),\", you could use the following code:\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:'tables = pd.read_html(\"https://en.wikipedia.org/wiki/2020_Summer_Olympics\")'})}),/*#__PURE__*/ _jsx(\"p\",{children:\"or you can do the same in two lines using the following code:\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"url = 'https://en.wikipedia.org/wiki/2020_Summer_Olympics'\"})}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"tables = pd.read_html(url)\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"Please note that this code extracts all tables available from the URL. You can check the number of tables captured from the page using:\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"print(f'Total tables: {len(tables)}')\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"Lets see how many tables are on the Wikipedia page for the 2020 Summer Olympics.\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,P7gS7FYcoOKDgIk41z9U2Sp5A4.png\",\"data-framer-height\":\"248\",\"data-framer-width\":\"1356\",height:\"124\",src:new URL(\"assets/P7gS7FYcoOKDgIk41z9U2Sp5A4.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1356 / 248\"},width:\"678\"}),/*#__PURE__*/ _jsxs(\"p\",{children:['The above tells us that there are nineteen tables on the page. Now, you may be wondering how to scrape the specific table from the page. You will need to inspect all scraped tables by using an index. Tip: \"tables\" is the list of dataframes returned by Pandas. You can get the first dataframe in the list of dataframes using ',/*#__PURE__*/ _jsx(\"code\",{children:\"tables[0]\"}),\".\"]}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,2XeJgxlRdVNRkNaE9u72OnQLs.png\",\"data-framer-height\":\"922\",\"data-framer-width\":\"1592\",height:\"461\",src:new URL(\"assets/2XeJgxlRdVNRkNaE9u72OnQLs.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1592 / 922\"},width:\"796\"}),/*#__PURE__*/ _jsx(\"p\",{children:'This data comes from the table called \"Games of the XXXII Olympiad\".'}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,ICBkOuCsyIV6Ox2D51USwsaUHc.png\",\"data-framer-height\":\"1122\",\"data-framer-width\":\"2082\",height:\"561\",src:new URL(\"assets/ICBkOuCsyIV6Ox2D51USwsaUHc.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"2082 / 1122\"},width:\"1041\"}),/*#__PURE__*/ _jsxs(\"p\",{children:['If you want to extract the table called \"2020 Summer Olympics medal table,\" you can inspect all tables and identify that the table was assigned index 7 ',/*#__PURE__*/ _jsx(\"code\",{children:\"tables[7]\"}),\". However, this is not an effective way of scraping the table from the page. Instead, you can make the table selection easier by using the \",/*#__PURE__*/ _jsx(\"code\",{children:\"match\"}),\" parameter to select a subset of tables. We can use the caption \u201C2020 Summer Olympics medal table\u201D to select the table.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:\"url = 'https://en.wikipedia.org/wiki/2020_Summer_Olympics'\"}),/*#__PURE__*/ _jsx(\"br\",{}),/*#__PURE__*/ _jsx(\"code\",{children:\"medal_table = pd.read_html(url, match=''2020 Summer Olympics medal table'')\"})]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"print(medal_table)\"})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,7NYH11dLqpRRCRBDEFt46mHJbd4.png\",\"data-framer-height\":\"740\",\"data-framer-width\":\"1302\",height:\"370\",src:new URL(\"assets/7NYH11dLqpRRCRBDEFt46mHJbd4.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1302 / 740\"},width:\"651\"}),/*#__PURE__*/ _jsx(\"p\",{children:'This gives us the data we wanted from the table called \"2020 Summer Olympics medal table\".'}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,Llbwo1rmLGWAnrzvJaKCVDxVfJ0.png\",\"data-framer-height\":\"664\",\"data-framer-width\":\"866\",height:\"332\",src:new URL(\"assets/Llbwo1rmLGWAnrzvJaKCVDxVfJ0.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"866 / 664\"},width:\"433\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Now you can save the table as a csv file using the following code:\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df = medal_table[0]\"})}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df.to_csv('medal_table.csv')\"})}),/*#__PURE__*/ _jsx(\"h2\",{children:\"Full Solution\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"import pandas as pd url = 'https://en.wikipedia.org/wiki/2020_Summer_Olympics' tables = pd.read_html(url) #prints number of tables found on the page print(f'Total tables: {len(tables)}') #check first which index was assigned to the table you are after #in this case \\\"2020 Summer Olympics medal table\\\" has index 7 #alternatively you can use match parameter to get one table df = tables[7] #save to csv file df.to_csv('Olympics2020_medal_table.csv')\"})}),/*#__PURE__*/ _jsx(\"h2\",{children:\"Pandas read_html() and error 403\"}),/*#__PURE__*/ _jsx(\"p\",{children:'This function works well on Wikipedia pages, but not on websites that don\\'t welcome scraping. Therefore, you are likely to run into error 403 \"HTTPError: HTTP Error 403: Forbidden\". Here is how to get around this problem: use the requests library together with pandas.'}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"For example, if you try to scrape the table called \",/*#__PURE__*/ _jsx(Link,{href:\"https://www.ffiec.gov/census/report.aspx?year=2020&state=01&report=demographic&msa=11500\",openInNewTab:false,smoothScroll:false,children:/*#__PURE__*/ _jsx(\"a\",{children:'\"2020 FFIEC Census Report - Summary Census Demographic Information\" from the FFIEC website'})}),\" using only Pandas, you will get an error 403.\"]}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,YrVW6GxkwOM6ap1GExnIwD04TE.png\",\"data-framer-height\":\"986\",\"data-framer-width\":\"1844\",height:\"493\",src:new URL(\"assets/YrVW6GxkwOM6ap1GExnIwD04TE.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1844 / 986\"},width:\"922\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"pd.read_html(url) - returns error 403\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"You can get around a 403 error by using the requests library in conjunction with the pandas read_html() function.\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"import requests import pandas as pd url = 'https://www.ffiec.gov/census/report.aspx?year=2020&state=01&report=demographic&msa=11500' #get html first with get function from requests lib html = requests.get(url).content #pass html into read_html() function df_list = pd.read_html(html) #index -1 will get you the last table available on the page df = df_list[-1] #save to csv file df.to_csv('my data.csv') print(df)\"})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,O0135zyAv2SjTpMjNQQ2DfnIc.png\",\"data-framer-height\":\"376\",\"data-framer-width\":\"1730\",height:\"188\",src:new URL(\"assets/O0135zyAv2SjTpMjNQQ2DfnIc.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1730 / 376\"},width:\"865\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,RLjI37UQyuo8Z1kOnEfNr92kZcs.png\",\"data-framer-height\":\"922\",\"data-framer-width\":\"2386\",height:\"461\",src:new URL(\"assets/RLjI37UQyuo8Z1kOnEfNr92kZcs.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"2386 / 922\"},width:\"1193\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Screenshot of partial table printout\"}),/*#__PURE__*/ _jsx(\"h2\",{children:\"Conclusion\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"This demonstrates that using \",/*#__PURE__*/ _jsx(\"code\",{children:\"pd.read_html()\"}),\" is a straightforward way of scraping data from webpages, as Pandas uses BeautifulSoup4 and html5lib on the backend, which can be beneficial for simple data scraping projects. However, if you want to be able to scrape any website on the web, you will need to learn much more about scraping. Hehe, learning never stops, just like web development.\"]})]}),qmKEIZQOx:\"rgb(0, 153, 255)\",V8PWfbvT8:\"how-to-scrape-a-table-from-a-website-using-python-2\",vny2uxJff:{alt:\"\",src:new URL(\"assets/IwFsdppuH3JtvLRhED9bx9AU.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,srcSet:`${new URL(\"assets/512/IwFsdppuH3JtvLRhED9bx9AU.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 512w, ${new URL(\"assets/IwFsdppuH3JtvLRhED9bx9AU.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 704w`},ZckEhR3V3:\"How to scrape tables from websites using Pandas read_html() function\"},{Djh5_J2Mt:\"Guides\",id:\"gPf2DDq3v\",iP8mvmvMM:\"2023-01-28T00:00:00.000Z\",KbGlbG3Yd:/*#__PURE__*/ _jsxs(React.Fragment,{children:[/*#__PURE__*/ _jsx(\"p\",{children:\"If you're working with data in Python Pandas, you may find yourself needing to drop duplicate rows across multiple columns. This can be a tricky task, but luckily there are a few different ways to go about it. In this blog post, we'll explore how to drop all duplicate rows and how to drop duplicate rows across multiple columns in Python Pandas.\"}),/*#__PURE__*/ _jsx(\"h3\",{children:\"Drop duplicates method\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"br\",{}),\"The first and the easiest way to remove duplicate rows in your Pandas Dataframe is to use the \",/*#__PURE__*/ _jsx(\"code\",{children:\"drop_duplicates()\"}),\" method.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Pandas \",/*#__PURE__*/ _jsx(\"strong\",{children:\"drop_duplicates()\"}),\" method returns Dataframe with duplicate rows removed.\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"em\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\"Syntax:\"})})}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"DataFrame.drop_duplicates\",/*#__PURE__*/ _jsx(\"em\",{children:\"(subset=None, *, keep='first', inplace=False, ignore_index=False)\"})]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"br\",{}),\"By default, this method removes duplicate rows based on all columns. So if you simply need to delete all duplicate rows from the Dataframe you can use \",/*#__PURE__*/ _jsxs(\"code\",{children:[\"df\",/*#__PURE__*/ _jsx(\"strong\",{children:\".\"}),\"drop_duplicates\",/*#__PURE__*/ _jsx(\"strong\",{children:\"()\"})]}),/*#__PURE__*/ _jsx(\"strong\",{children:\" \"}),\"without specifying parameters. Please note that if you want to modify Dataframe inplace you will need to specify inplace parameter\",/*#__PURE__*/ _jsxs(\"code\",{children:[\"df\",/*#__PURE__*/ _jsx(\"strong\",{children:\".\"}),\"drop_duplicates\",/*#__PURE__*/ _jsx(\"strong\",{children:\"(inplace=True)\"})]}),\".\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"em\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\"Example: Delete all duplicate rows from the Dataframe\"})})}),/*#__PURE__*/ _jsx(\"p\",{children:\"Let's create a Dataframe with some duplicate rows.\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,SUmxGb8wcnkCsZJ52jOsOaTNHA.png\",\"data-framer-height\":\"808\",\"data-framer-width\":\"1692\",height:\"404\",src:new URL(\"assets/SUmxGb8wcnkCsZJ52jOsOaTNHA.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1692 / 808\"},width:\"846\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"In this Dataframe row 0 is a duplicate of row 5, and row 2 is a duplicate of row 6. So when you use the \",/*#__PURE__*/ _jsx(\"code\",{children:\"df.drop_duplicates()\"}),\" method, those duplicates will be removed.\"]}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,BE1oOrrKORuZhtuQszxonBYVW7k.png\",\"data-framer-height\":\"516\",\"data-framer-width\":\"1748\",height:\"258\",src:new URL(\"assets/BE1oOrrKORuZhtuQszxonBYVW7k.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1748 / 516\"},width:\"874\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"However if you need to drop duplicate rows across specific column(s), use \",/*#__PURE__*/ _jsx(\"code\",{children:\"subset\"}),\".\"]}),/*#__PURE__*/ _jsx(\"p\",{children:\"Your subset can be one column if you want to identify duplicates in this one specific column and keep first ocurance.\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df.drop_duplicates(subset=['Your Column'])\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"Or it can contain multiple columns that you want to use to identify duplicates.\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df.drop_duplicates(subset=['Your Column 1', 'Your Column 2' ])\"})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,u4LMDnB1qvgp3KsJfv2JAnNp0pA.png\",\"data-framer-height\":\"1116\",\"data-framer-width\":\"1688\",height:\"558\",src:new URL(\"assets/u4LMDnB1qvgp3KsJfv2JAnNp0pA.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1688 / 1116\"},width:\"844\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"drop_duplicates() method with subset columns for removing duplicates\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/ _jsx(\"h3\",{children:\"Groupby() method\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"br\",{}),\"The second way to drop duplicate rows across multiple columns is to use the \",/*#__PURE__*/ _jsx(\"code\",{children:\"df.groupby()\"}),\" method.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"br\",{}),\"Lets have a look at the Pandas Dataframe which contains duplicates values according to two columns (A and B) and where you want to remove duplicates keeping the row with max value in column C. This can be achieved by using groupby method.\"]}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,bjrXQbGRveppVvQPhytlC8iqE.png\",\"data-framer-height\":\"1256\",\"data-framer-width\":\"1302\",height:\"628\",src:new URL(\"assets/bjrXQbGRveppVvQPhytlC8iqE.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1302 / 1256\"},width:\"651\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Groupby method -to remove duplicate rows\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/ _jsxs(\"h3\",{children:[\"Identify duplicate rows with \",/*#__PURE__*/ _jsx(\"code\",{children:\"df.duplicated()\"})]}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"You may also find useful to know about about \",/*#__PURE__*/ _jsx(\"code\",{children:\"df.duplicated()\"}),\"which returns boolean series denoting duplicate rows.\"]}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,ixJQPQhZ9soEkEFRk158MQb3n8.png\",\"data-framer-height\":\"1170\",\"data-framer-width\":\"1388\",height:\"585\",src:new URL(\"assets/ixJQPQhZ9soEkEFRk158MQb3n8.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1388 / 1170\"},width:\"694\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Use \",/*#__PURE__*/ _jsx(\"code\",{children:\"df.duplicated()\"}),\" to identify duplicate rows\"]}),/*#__PURE__*/ _jsx(\"p\",{children:\"By default, for each set of duplicated values, the first occurrence is set on False and all others on True.\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"br\",{}),\"By using one of these methods, you can easily drop all duplicate rows across multiple columns in Python Pandas. With a few lines of code, you can quickly and easily clean up your data and make sure that it is accurate and up-to-date.\"]})]}),qmKEIZQOx:\"rgb(0, 153, 255)\",V8PWfbvT8:\"drop-all-duplicate-rows-across-multiple-columns-in-python-pandas\",vny2uxJff:{alt:\"\",src:new URL(\"assets/AF6YGx9NZN0JvedfShBH5luOU.jpeg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,srcSet:`${new URL(\"assets/512/AF6YGx9NZN0JvedfShBH5luOU.jpeg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 512w, ${new URL(\"assets/1024/AF6YGx9NZN0JvedfShBH5luOU.jpeg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 1024w, ${new URL(\"assets/AF6YGx9NZN0JvedfShBH5luOU.jpeg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 2000w`},ZckEhR3V3:\"Drop all duplicate rows across multiple columns in Python Pandas\"},{Djh5_J2Mt:\"Guides\",id:\"VpnaIfRup\",iP8mvmvMM:\"2022-08-15T00:00:00.000Z\",KbGlbG3Yd:/*#__PURE__*/ _jsxs(React.Fragment,{children:[/*#__PURE__*/ _jsx(\"p\",{children:\"If you're working with AI image generation, it's important to create effective prompts that will help the AI model learn to generate images that are realistic and accurate. This guide will give you a quick overview of prompt engineering before you waste all your free trial credits. Keep in mind that this is a general guide, and there may be differences between text-to-image AI generators like DALL\\xb7E2, Stable Diffusion, and Midjourney. Therefore, not all tips might apply to the specific generative model you are using.\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Without further ado let's move on to the detailed guide that explains how to come up with effective prompts for text-to-image AI generation.\"}),/*#__PURE__*/ _jsx(\"h2\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\"What are Prompts?\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"A prompt is a set of instructions given to a machine learning algorithm that is used to generate a specific output. The user can provide the AI with a prompt, such as a colour or a subject, and the AI will generate a piece of art based on that prompt. For example, a prompt might be: \u201CGenerate a picture of a brown dog on a skateboard.\u201D\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Prompts are descriptions in natural language that act as an input for AI art generators, such as DALL.E, DALL.E Mini, DALL.E 2, Midjourney, Stable DIffusion, Disco Diffusion, and other machine learning models. It is the communication medium for AI art generators, also known as machine learning models.\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Prompts convey your idea of what an image should contain to the text-to-image machine learning models.\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Prompts can be as simple as a single line of text or they can be vague. Sometimes you can even use emojis as prompts and get the optimal output.\"}),/*#__PURE__*/ _jsx(\"h2\",{children:\"Where can I try my prompts or DALL.E alternatives?\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"If you're looking for an ultra-imaginative text-to-image AI generator, you may want to check out DALL.E and DALL.E 2. Although getting access to these generators is not the easiest, we look at similar models that are making the rounds in the world of AI. All of these models are web-based and don't require you to have a ton of CPU power.\"}),/*#__PURE__*/ _jsxs(\"ul\",{style:{\"--framer-font-size\":\"22px\",\"--framer-text-alignment\":\"start\",\"--framer-text-color\":\"rgb(60, 72, 78)\",\"--framer-text-transform\":\"none\"},children:[/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(Link,{href:\"https://openai.com/blog/dall-e-now-available-without-waitlist\",openInNewTab:false,smoothScroll:false,children:/*#__PURE__*/ _jsx(\"a\",{children:\"DALL.E\"})})})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(Link,{href:\"https://huggingface.co/spaces/dalle-mini/dalle-mini\",openInNewTab:false,smoothScroll:false,children:/*#__PURE__*/ _jsx(\"a\",{children:\"DALL.E Mini\"})})})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(Link,{href:\"https://beta.dreamstudio.ai/\",openInNewTab:false,smoothScroll:false,children:/*#__PURE__*/ _jsx(\"a\",{children:\"DreamStudio.AI\"})})})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(Link,{href:\"https://www.midjourney.com/home\",openInNewTab:false,smoothScroll:false,children:/*#__PURE__*/ _jsx(\"a\",{children:\"Midjourney\"})}),\" - in Discord\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(Link,{href:\"https://openai.com/blog/clip/\",openInNewTab:false,smoothScroll:false,children:/*#__PURE__*/ _jsx(\"a\",{children:\"CLIP\"})})})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(Link,{href:\"https://rudalle.ru/en/\",openInNewTab:false,smoothScroll:false,children:/*#__PURE__*/ _jsx(\"a\",{children:\"RuDALL.E\"})}),\" - in Telegram & Discord\"]})})]}),/*#__PURE__*/ _jsx(\"h2\",{children:\"Prompt Basics\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"A good prompt must contain a noun, adjective, and verb to create an interesting subject.\"}),/*#__PURE__*/ _jsxs(\"ul\",{style:{\"--framer-font-size\":\"22px\",\"--framer-text-alignment\":\"start\",\"--framer-text-color\":\"rgb(60, 72, 78)\",\"--framer-text-transform\":\"none\"},children:[/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Write at least 3 to 7 words\"}),\": A prompt with more than 3 words will give the AI a clear context.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Use multiple adjectives\"}),\": Multiple adjectives will infuse multiple feelings into the artwork. Eg: beautiful, realistic, colorful, massive.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Include the name of the artist\"}),\": Including an artist\u2019s name in the prompt will mimic the style of that artist. Eg: Picasso, Vincent Van Gogh, Paul Gauguin.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"A style\"}),\": If you want the art to be in a particular style, you must include styles, such as surrealism, symmetry, contemporary, minimalism, and so on.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"A computer graphics\"}),\": With computer graphics, the art becomes more effective and meaningful. Eg: Octane render, Cycles, Unreal Engine, Ray tracing\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Quality\"}),\": Mention the quality of the art such as low, medium, high, 4k, and 8k.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Don't use banned words\"}),\" by the AI generator to avoid being banned.\"]})})]}),/*#__PURE__*/ _jsx(\"h2\",{children:\"Basic Anatomy of effective Prompts for AI Image Generation\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"When it comes to AI image generation, the prompt is everything. A good prompt can mean the difference between a realistic and accurate image, and one that looks like it was drawn by a child or a complete mess.\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Generally, a text input for AI Image Generation always has the same structure, In most cases you need three ingredients:\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,pDxUynic270cyVSqcR6LoSFa7R4.png\",\"data-framer-height\":\"340\",\"data-framer-width\":\"2024\",height:\"170\",src:new URL(\"assets/pDxUynic270cyVSqcR6LoSFa7R4.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"2024 / 340\"},width:\"1012\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\"Example:\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"\u201CA squirrel \u2013 on a tree eating nut, \u2013 expressionist painting.\u201D\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,YNGN9IyDXedRlu7xOcIkN2X9ORY.png\",\"data-framer-height\":\"512\",\"data-framer-width\":\"512\",height:\"256\",src:new URL(\"assets/YNGN9IyDXedRlu7xOcIkN2X9ORY.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"512 / 512\"},width:\"256\"}),/*#__PURE__*/ _jsx(\"p\",{children:'\"A squirrel \u2013 on a tree eating nut, \u2013 expressionist painting.\" By Dreamstudio.ai'}),/*#__PURE__*/ _jsx(\"p\",{children:\"\u201CA dream of a distant galaxy, by Caspar David Friedrich, matte painting trending on artstation HQ.\u201D\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,tDoTa68SdvEk8rGm66lykrRiKM.png\",\"data-framer-height\":\"512\",\"data-framer-width\":\"512\",height:\"256\",src:new URL(\"assets/tDoTa68SdvEk8rGm66lykrRiKM.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"512 / 512\"},width:\"256\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"\u201CA dream of a distant galaxy, by Caspar David Friedrich, matte painting trending on artstation HQ.\u201D By Dreamstudio.ai\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"There are a few things that make up a good prompt. The input language must be clear and concise. This is because any text to image model would be mainly trained on images alt text and image descriptions from stock photography websites. If there are any ambiguity or errors in your input, the image generation will be affected.\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Your input must be a complete sentence. This is to ensure that the model can learn the context of the input and generate a corresponding image.\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"It should also be grammatically correct. This is to avoid any confusion for the model when it is trying to generate an image.\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\"Concrete words = All images depict the concrete thing (a squirrel).\"})}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Concrete words examples: \"}),\"cat,\",/*#__PURE__*/ _jsx(\"strong\",{children:\" \"}),\"squirrel, microscope, lamp, tree, ketchup, bird, car, bike, guinea pig, seagull, spaghetti, cage, peacock, tomato, mousetrap, lantern, axe, umbrella, cupcake.\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\"Abstract words = surprises.\"})}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Abstract words examples: \"}),\"hope, dream, fantasy, success, progressive, sainted, adequate, happines, sufficient, reality, intend, likability, agnosticism, ugly, determinate, dignify, standpoint, imperative, absurd.\"]}),/*#__PURE__*/ _jsx(\"p\",{children:'Concrete words produce images that depict the concrete thing. Abstract words on the other hand will give you more varied results. \\xa0If you want to get an accurate image of a concrete thing, you should use concrete words. All of the images in the following output depict a squirrel, so you can be sure that if you use concrete words like \"squirrel\" you\\'ll get an image of a squirrel. \\xa0'}),/*#__PURE__*/ _jsx(\"p\",{children:\"On the other hand, if you use abstract words, you'll get more varied results. Some text-to-image AIs are better at dealing with abstract concepts than others, so you may get an image that makes sense, or you may get an image of book covers that contain the abstract word that you specified in the title.\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"em\",{children:'\"Happiness, detailed image, \\xa04K\"'})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,5kRgJWR2XPhwjg2E0WEcJX6Z8iw.png\",\"data-framer-height\":\"512\",\"data-framer-width\":\"512\",height:\"256\",src:new URL(\"assets/5kRgJWR2XPhwjg2E0WEcJX6Z8iw.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"512 / 512\"},width:\"256\"}),/*#__PURE__*/ _jsx(\"p\",{children:'\"Happiness, detailed image, 4K\" By Dreamstudio.ai'}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\"Write positive prompts \u2013 describe what should exist, not what is missing.\"})}),/*#__PURE__*/ _jsx(\"p\",{children:'If you want to avoid having a bearded man in your image, don\\'t write \"a man without a beard.\" Instead, write \"a cleanly shaved man.\" The AI takes things literally, so if something is in the prompt, it\\'s more likely to image it.'}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Keep in mind that vague plural words like \u201Ccats\u201D leave a lot of room for interpretation to the text-to-image AI. Did you mean two cats or 12 cats? Therefore, when you want multiple subjects, use plural nouns with specific numbers. However, it was reported that while DALL\\xb7E2 has no problem creating multiple subjects in a scene, it falls short in separating certain characteristics of each from each other. So it is better to \",/*#__PURE__*/ _jsx(\"strong\",{children:\"stick to prompts with up to three subjects\"}),\".\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"It is also important to \",/*#__PURE__*/ _jsx(\"strong\",{children:\"know which language the model was trained on\"}),\". This is because different languages can have different word order, and this can impact the image generation. For example, if a model was trained on English but the prompt is in French, the image generation may not be as accurate due to translation issues.\"]}),/*#__PURE__*/ _jsx(\"p\",{children:\"If you're using a text-to-image generator that has automatic translation built in, expect a lot of failures due to incorrect translation. Normally, image-generating platforms don't show you the translation of your prompt until the image is generated, which can delay the process quite a bit. I've seen some really odd translations, so it is always the best to do translation first in a separate program and then paste the translated prompt into the image to text AI.\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"If you're looking to get the most out of your prompt, you should \",/*#__PURE__*/ _jsx(\"strong\",{children:\"phrase it in English when using one of the following; Stable Diffusion, Dalle, Dalle2, Midjourney, or Dereamstudio\"}),\". The Stable Diffusion algorithm was trained on a subset of the LAION-5B database, which contains 2.3 billion English image-text pairs and 2.2 billion image-text pairs from 100+ other languages. This means you're not limited to the Western European alphabet \u2013 you can use non-Roman character sets like Arabic or Chinese, and \",/*#__PURE__*/ _jsx(\"strong\",{children:\"you can even use emojis\"}),\".\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"The country of origin of the AI can make a big difference in the output.\"}),\" AIs trained with data from a specific country are more likely to be familiar with the local artists from that country. So, if you're using a Russian AI, it will likely know more about Russian and Eastern European artists than it will about Western artists. However, this isn't as much of a concern if you're using an AI focused on English, since English is a global language. I highly recommend keeping this in mind and selecting the best text-to-image generator for the look that you are after.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"AIs are bias:\"}),' You should not forget that the image databases that an AI generator was trained on are likely to have biases. You need to be aware of them in order to get the desired output on the first try. A typical example would be a prompt \"developer working in the office\", such a prompt is highly unlikely to return an image of a white male working on a computer. So if you need an image that represents a more diverse workforce, you will need to fine-tune your prompt.']}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"em\",{children:'\"A developer working in an office, photo, detailed image, 4K\"'})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,nHYdHpz1QQsuefg4M66u7WHjU.png\",\"data-framer-height\":\"778\",\"data-framer-width\":\"1278\",height:\"389\",src:new URL(\"assets/nHYdHpz1QQsuefg4M66u7WHjU.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1278 / 778\"},width:\"639\"}),/*#__PURE__*/ _jsx(\"p\",{children:'\"A developer working in an office, photo, detailed image, 4K\" Dreamstudio.ai'}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Lastly, \",/*#__PURE__*/ _jsx(\"strong\",{children:\"the prompt should be specific\"}),'. This is because the more specific the prompt, the more likely it is that the AI will generate an accurate image. For example, if the prompt is simply \"generate an image of a dog\", the AI may generate a generic image of a dog that does not look realistic. However, if the prompt is \"generate an image of a golden retriever\", the AI is more likely to generate a realistic image of a golden retriever.']}),/*#__PURE__*/ _jsx(\"p\",{children:\"Overall, the prompt is essential for AI image generation. A good prompt will result in a realistic and accurate image, while a bad prompt will result in an inaccurate and poor quality image.\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\"More Examples:\"})}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"em\",{children:'\"A squirrel \u2013 on a tree eating nut, \u2013 watercolour painting in pastel colours, detailed image.\"'})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,8LhzoqHjax5PFmB0JhXAkobKlu8.png\",\"data-framer-height\":\"512\",\"data-framer-width\":\"512\",height:\"256\",src:new URL(\"assets/8LhzoqHjax5PFmB0JhXAkobKlu8.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"512 / 512\"},width:\"256\"}),/*#__PURE__*/ _jsx(\"p\",{children:'\"A squirrel \u2013 on a tree eating nut, \u2013 watercolour painting in pastel colours, detailed image.\" By Dreamstudio.ai'}),/*#__PURE__*/ _jsx(\"p\",{children:'Surprise - AI completely forgot about the \"eating nut\" part. When this happens you can try a couple more iterations or rewrite your prompt.'}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"em\",{children:'\"A squirrel seating on a tree and eating nuts, \u2013 watercolour painting in pastel colours, detailed image, 4K\"'})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,ljbUNSVv1jBZLlnKCaZHuu2gheU.png\",\"data-framer-height\":\"512\",\"data-framer-width\":\"512\",height:\"256\",src:new URL(\"assets/ljbUNSVv1jBZLlnKCaZHuu2gheU.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"512 / 512\"},width:\"256\"}),/*#__PURE__*/ _jsx(\"p\",{children:'\"A squirrel seating on a tree and eating nuts, \u2013 watercolour painting in pastel colours, detailed image, 4K\" By Dreamstudio.ai\\xa0'}),/*#__PURE__*/ _jsx(\"p\",{children:\"DreamStudio.ai keeps outputting red squirrels \uD83D\uDC3F with green background even when being asked for an image in pastel colors. So let's be more specific and say that the squirrel should be grey.\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"em\",{children:'\"A grey squirrel seating on a tree and eating nuts, \u2013 watercolour painting in pastel colours, detailed image, 4K\"'})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,e52VcPFvMUsWLRenEyAJlktgL0U.png\",\"data-framer-height\":\"512\",\"data-framer-width\":\"512\",height:\"256\",src:new URL(\"assets/e52VcPFvMUsWLRenEyAJlktgL0U.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"512 / 512\"},width:\"256\"}),/*#__PURE__*/ _jsx(\"p\",{children:'\"A grey squirrel seating on a tree and eating nuts, \u2013 watercolour painting in pastel colours, detailed image, 4K\" By Dreamstudio.ai\\xa0'}),/*#__PURE__*/ _jsx(\"p\",{children:'Sometimes AI will surprise you by creating a nice image, but nothing as expected. Here we have two subjects even though we specified that we want one squirrel. This must be due to \"2matte\" being mentioned. This reminds us that we need to use positive prompts \u2013 describe what should exist, not what is missing.'}),/*#__PURE__*/ _jsx(\"p\",{children:\"Plus the image looks more like a photo than a Botticelli painting.\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"em\",{children:'\"Cute squirrel:: wind::1 natural lighting::1 Sandro botticelli::1 white::1 --quality 2matte painting trending on Midjourney, pastel colours\"'})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,UJg0WUsq8jeDYOPANvj1rmsccXk.png\",\"data-framer-height\":\"512\",\"data-framer-width\":\"1024\",height:\"256\",src:new URL(\"assets/UJg0WUsq8jeDYOPANvj1rmsccXk.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1024 / 512\"},width:\"512\"}),/*#__PURE__*/ _jsx(\"p\",{children:'\"Cute squirrel:: wind::1 natural lighting::1 Sandro botticelli::1 white::1 --quality 2matte painting trending on Midjourney, pastel colours\" By Dreamstudio.ai'}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,Ux4vp9fqsmtt0OJFPCaFqZHXLh8.png\",\"data-framer-height\":\"512\",\"data-framer-width\":\"1024\",height:\"256\",src:new URL(\"assets/Ux4vp9fqsmtt0OJFPCaFqZHXLh8.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1024 / 512\"},width:\"512\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Cute squirrel:: wind::1 natural lighting::1 Sandro Botticelli::1 white::1 --quality 2matte painting trending on Midjourney, pastel colours By Dreamstudio.ai\"}),/*#__PURE__*/ _jsx(\"p\",{children:'This is looking more like the expected painting of a cute squirrel by Botticelli. This proves our hypothesis that \"2matte\" was resulting in an output image having two squirrels.'}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,whka6CyQFO8fc58NXSbg7NWnU.png\",\"data-framer-height\":\"512\",\"data-framer-width\":\"1024\",height:\"256\",src:new URL(\"assets/whka6CyQFO8fc58NXSbg7NWnU.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1024 / 512\"},width:\"512\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Cute squirrel:: wind::1 natural lighting::1 Sandro Botticelli::1 white::1 matte painting trending on Midjourney, pastel colours By Dreamstudio.ai\"}),/*#__PURE__*/ _jsx(\"h2\",{children:\"Tips to Keep in Mind:\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Here are a few tips to keep in mind when creating prompts for AI image generation:\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"1.\"}),\" Think about what kind of images you want to generate. Do you want to create realistic images, or abstract ones? Once you know what kind of images you want to generate, it will be easier to come up with appropriate prompts.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"2.\"}),\" Consider what kind of information you want the AI to have access to. For example, if you're generating realistic images, you'll need to provide the AI with data about the scene, such as the location, lighting, and objects present. On the other hand, if you're generating abstract images, you might want to provide the AI with a list of colors, shapes, and patterns.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"3.\"}),\" Try to be as specific as possible with your prompts. The more specific the prompt, the easier it will be for the AI model to learn and generate images that match the prompt.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"4.\"}),\" Use different art styles like filters in your prompts. If you're looking to add a little more personality to your AI-generated images, you can try using different art styles as filters for your prompts. By doing this, you can give the AI a specific set of instructions to follow that will result in an image that's more in line with your desired aesthetic.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"5.\"}),\" Keep the prompt simple. Complex prompts can be difficult for the AI model to understand and can lead to inaccurate image generation. The prompt should be relatively short! For example, Midjourney prompts should stay under 60 words, while prompts for DALL\\xb7E2 must stay under 400 characters.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"6.\"}),\" Define a colour palette in your prompts. If you want more control over the final output of your image, you can try defining a colour palette in the prompt for text-to-image AI. This will allow you to choose the colours that you want your image to be, and the AI will then use those colours to generate the image.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"7.\"}),\" Write a prompt that contains the names of multiple famous artists to get a unique style. Don't worry about whether to use \\\"and\\\" or a comma in your prompt or about the order of artists' names. Most text-to-image generators already handle such obvious bugs.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"8.\"}),\" Be creative! There are no wrong answers when it comes to prompts for AI image generation. So don't be afraid to experiment and see what kind of results you can get.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"9.\"}),\" It can be a major challenge for text-to-image AI to get relationships right. This is because AI doesn't always understand how things are connected. You can try iterating the description, changing the order of the words, repeating elements, or adding more objects. Another option is to use the style of the painting to help with the direction.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"10.\"}),\" Be patient. It can take some time for you to understand behaviour of the AI model and to start generating images that are realistic and accurate. Don't expect perfection from the outset; give yourself time to learn and improve.\"]}),/*#__PURE__*/ _jsx(\"h2\",{children:\"Prompt builders to try\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"There are many tools available to help you create prompts for text-to-image AI generators. If you're not interested in creating them manually, here is a list of some of the most popular tools.\"}),/*#__PURE__*/ _jsxs(\"ul\",{style:{\"--framer-font-size\":\"22px\",\"--framer-text-alignment\":\"start\",\"--framer-text-color\":\"rgb(60, 72, 78)\",\"--framer-text-transform\":\"none\"},children:[/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(Link,{href:\"https://blog.user.today/midjourney/\",openInNewTab:false,smoothScroll:false,children:/*#__PURE__*/ _jsx(\"a\",{children:\"Midjourney Random Commands Generator\"})})})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(Link,{href:\"https://phraser.tech/\",openInNewTab:false,smoothScroll:false,children:/*#__PURE__*/ _jsx(\"a\",{children:\"Phraser.tech\"})}),\" - prompt builder for multiple neural networks (AIs).\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(Link,{href:\"https://huggingface.co/spaces/doevent/prompt-generator\",openInNewTab:false,smoothScroll:false,children:/*#__PURE__*/ _jsx(\"a\",{children:\"Huggingface Midjourney prompt generator\"})})})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(Link,{href:\"https://huggingface.co/succinctly/text2image-prompt-generator?text=Portrait+of+cute+squirrel%2C+japandie\",openInNewTab:false,smoothScroll:false,children:/*#__PURE__*/ _jsx(\"a\",{children:\"Text to Image prompt generator\"})}),\" - prompt builder for artistic prompts.\"]})})]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\"Noonshot.com:\"})}),/*#__PURE__*/ _jsxs(\"ul\",{style:{\"--framer-font-size\":\"22px\",\"--framer-text-alignment\":\"start\",\"--framer-text-color\":\"rgb(60, 72, 78)\",\"--framer-text-transform\":\"none\"},children:[/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(Link,{href:\"https://prompt.noonshot.com/midjourney\",openInNewTab:false,smoothScroll:false,children:/*#__PURE__*/ _jsx(\"a\",{children:\"MidJourney Prompt Helper\"})})})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(Link,{href:\"https://prompt.noonshot.com/dalle\",openInNewTab:false,smoothScroll:false,children:/*#__PURE__*/ _jsx(\"a\",{children:\"Dall-E Prompt Helper\"})})})})]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\"Promptomania.com:\"})}),/*#__PURE__*/ _jsxs(\"ul\",{style:{\"--framer-font-size\":\"22px\",\"--framer-text-alignment\":\"start\",\"--framer-text-color\":\"rgb(60, 72, 78)\",\"--framer-text-transform\":\"none\"},children:[/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(Link,{href:\"https://promptomania.com/dreamstudio-prompt-builder\",openInNewTab:false,smoothScroll:false,children:/*#__PURE__*/ _jsx(\"a\",{children:\"DreamStudio Prompt Builder\"})})})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(Link,{href:\"https://promptomania.com/midjourney-prompt-builder/\",openInNewTab:false,smoothScroll:false,children:/*#__PURE__*/ _jsx(\"a\",{children:\"Midjourney Prompt Builder\"})})})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(Link,{href:\"https://promptomania.com/stable-diffusion-prompt-builder/\",openInNewTab:false,smoothScroll:false,children:/*#__PURE__*/ _jsx(\"a\",{children:\"Stable Diffusion Prompt Builder\"})})})})]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(Link,{href:\"https://lexica.art/\",openInNewTab:false,smoothScroll:false,children:/*#__PURE__*/ _jsx(\"a\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\"Lexica.art\"})})}),\" - a collection of prompts and their resulting images produced with Stable Diffusion.\"]}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,860Mk9UMpGpATK3XU3tawgUrKrQ.png\",\"data-framer-height\":\"512\",\"data-framer-width\":\"512\",height:\"256\",src:new URL(\"assets/860Mk9UMpGpATK3XU3tawgUrKrQ.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"512 / 512\"},width:\"256\"}),/*#__PURE__*/ _jsxs(\"p\",{children:['Prompt: \"Portrait of squirrel : : wes anderson style :: : glossy magazine print, lithograph, ink drawing :: : trending on artstation, by Jean-Honor\\xe9 Fragonard, Peter mohrbacher, hyper realism, insane details\". Prompt created by ',/*#__PURE__*/ _jsx(Link,{href:\"https://huggingface.co/succinctly/text2image-prompt-generator?text=Portrait+of+cute+squirrel%2C+japandie\",openInNewTab:false,smoothScroll:false,children:/*#__PURE__*/ _jsx(\"a\",{children:\"Text to Image prompt generator\"})}),\". Generated by Dreamstudio.ai\"]}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,HZ6Cc8RBGiBmNeiTGOVRcFBc4.png\",\"data-framer-height\":\"512\",\"data-framer-width\":\"512\",height:\"256\",src:new URL(\"assets/HZ6Cc8RBGiBmNeiTGOVRcFBc4.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"512 / 512\"},width:\"256\"}),/*#__PURE__*/ _jsxs(\"p\",{children:['Prompt: \"Portrait of cute squirrel, japandie, in the style of Jean Giraud illustration + symmetry + detailed intricate ink illustration + tarot card with ornate border frame + by Peter Mohrbacher + complementing colors + frame + golden frame\" Prompt created by ',/*#__PURE__*/ _jsx(Link,{href:\"https://huggingface.co/succinctly/text2image-prompt-generator?text=Portrait+of+cute+squirrel%2C+japandie\",openInNewTab:false,smoothScroll:false,children:/*#__PURE__*/ _jsx(\"a\",{children:\"Text to Image prompt generator\"})}),\". Generated by Dreamstudio.ai\"]}),/*#__PURE__*/ _jsx(\"h2\",{children:\"Here's a list of words that normally improve outputs for the text-to-image AIs.\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"If you're suffering from writer's block but still want to try text-to-image AI, here are a few styles, artists, and mediums that may help improve your results.\"}),/*#__PURE__*/ _jsxs(\"ul\",{style:{\"--framer-font-size\":\"22px\",\"--framer-text-alignment\":\"start\",\"--framer-text-color\":\"rgb(60, 72, 78)\",\"--framer-text-transform\":\"none\"},children:[/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Art styles: \"}),\"Abstract, Abstract expressionism, Academism, Action painting, American realism, Analytical cubism, Anime, Art Deco, Art Nouveau, Baroque, Bauhaus, Biopunk, Color Field painting, Classical realism, Conceptual art, Cubism, Cybernoir, Cyberpunk, Dada, Dark fantasy, De Stijl, Decopunk, Dieselpunk, Digital art, Expressionism, Fauvism, Futurism, Fine art, Futurism, Gothic, Impressionism, Installation art, Land art, Lyrical Abstraction, Manga, Modern art, Minimalism, Modernism, Neo-Dada, Neo-expressionism, Neoclassical, Neo-Impressionism, New realism, Nouveau Realisme, Op Art, Orphism, Photorealism, Pixel art, \\xa0Pop art, Post-Impressionism, Post-minimalism, Post-painterly abstraction, Precisionism, Purism, Realism, Rococo, Romanticism, Socialist realism, Steampunk, Surrealism, Synthwave, Surrealism, Symbolism, Synchromism, Tonalism, Ukiyo-e, Video art, and Zouave.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Paint types: A\"}),\"crylic paint, Airbrush, Canvas, Cave art, Chinese painting, Coffee paint, Color field painting, Dripping paint, Fine art, Glass paint, Gouache, graffitti, Hard edge painting, Hydrodipped, Mural, Oil on canvas, Oil paint, Painting, Paper-marbling, Puffy paint, Rock art, Scroll painting, Splatter paint, Spray paint, Still-life, Street art, Tempera paint, Tibetan painting, Watercolor, Wet paint.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Print Styles:\"}),\" Advertisement, Aquatint, Banner, Barcode, Block printing, Blueprint, Booklet, Business card, Collage, Coloring book, Comic book, Cyanotype, Election photo, Election poster, Etching, Graphic novel, Halftone, illuminated manuscript, illustrated-booklet, instruction manual, intaglio, Iinocut, Lithograph, Logo, Magazine, \u201CMagic the Gathering\u201D card, Manuscript, Map, Mezzotint, Mono printing, Movie poster, Newspaper, Newsprint, Photocollage, Photograph, Postage stamp, Poster, Product photo, Propaganda Poster, QR code, Schematic, Signage, Silver gelatin, Sticker, Storyboard, Storybook illustration, Tarot card, Visual novel, Wall decal, Woodblock print.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Adjectives:\"}),\" alien, ancient, angelic, angry, anxious, athletic, award-winning, basic, beautiful, chaotic, cheerful, clean, cold, colorful, confusing, cozy, creepy, cute, depressing, detailed, dirty, disgusting, dreamy, dry, ecstatic, elderly, ethereal, evil, excited, expensive, fancy, fat, flat, flat design, flat shading, fluffy, friendly, furry, fuzzy, gloomy, good, gorgeous, greeble, hairy, happy, highly detailed, huge, hyperrealistic, impossible, incoherent, intricate, intricate maximalist, joyful, large, lonely, lucid, luminous, massive, massive scale, mature, mellow, micro, mini, minimalist, moody, morbid, mottled, muted, nano, nervous, OCD, old, ornate, otherworldly, photorealistic, plain, powerful, pretty, priceless, psychedelic, quiet, rainy, realistic, refreshing, sad, simple, sinister, sleepy, smooth, spooky, strong, surface detail\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Lighting:\"}),\" accent lighting, afternoon, artifical lighting, backlighting, beautiful lighting, blue hour, bright lighting, lit by candlelight, Christmas lights, cinematic lighting, colorful lighting, contre-jour, crepuscular rays, dark lighting, dawn, daylight, daytime, dim lighting, dramatic lighting, dusk, evening, film noir lighting, lit by firelight, flickering light, floodlight, fluorescent light, front lighting, global illumination, golden hour, halfrear lighting, halogen light, hard lighting, high key lighting, incandescent light, low key lighting, low lighting, moody lighting, morning, natural lighting, nighttime, noon, portrait lighting, ray tracing, ray tracing global illumination, rays of light, rays of shimmering light, realistic lighting, Rembrandt lighting, rim lighting, silhouette lighting, soft lighting, split lighting, spotlight, studio lighting, sunlight, sunrise, sunset, twilight, ultraviolet light, volumetric lighting, Xray\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Time periods:\"}),\" ancient Egypt, ancient Greece, ancient Rome, antique, Assyrian Empire, Aztec, Babylonian Empire, Benin Kingdom, Bronze Age, Byzantine Empire, Carolingian, Dark Ages, Edwardian, Elizabethan, Georgian, Gilded Age, Great Depression, Heian Period, Incan, Industrial Revolution, Iron Age, Maori, Mayan, medieval, Meiji Period, midcentury, Middle Ages, Ming Dynasty, Minoan, modern, Moorish, Mughal Era, Nasrid, Navajo, Neolithic, Olmec, Ottoman Empire, Paleolithic, Persian Empire, pre-Columbian, prehistoric, Qing Dynasty, Regency, Renaissance, retro, Shang Dynasty, Songhai, Stone Age, Sumerian, Tokugawa Shogunate, Tudor, Victorian, Viking, World War I, World War II, Zhou Dynasty, Zuni-Pueblo, 1100s, etc.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Decorative Art: \"}),\"3D print, amigurumi, applique, balloon modelling, balloon twisting, bas-relief, beadwork, blown glass, bone china, carved, carved ivory, carved lacquer, carving, chip-carving, claymation, cloisonne, crochet, cross stitch, diorama, embroidery, enameling, felting, fretwork, glass mosaic, ice-carving, impressionist mosaic, inlaid, intarsia, jigsaw puzzle, crochet, lacquer, lampwork, latte art, leather carving, leatherwork, marble, marquetry, micromosaic, miniature painting, modular origami, mosaic, needlework, origami, paper model, papercutting, papier-mache, photographic mosaic, Pietra dura, porcelain, pottery, puppet, puzzle, pysanky, quillwork, quilted, relief-carving, repousse, rigid origami, sand art, scrimshaw, sculpture, stained glass, statue, string-art, tapestry, tattoo, tattoo art, Venetian glass, weaving, wet-folding, whittling, wood-burning\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Rendering techniques:\"}),\" 3D model, 3ds Max, 500px, Arnold render, ArtStation, Blender Render, CGsociety, Cinema4D Render, CryEngine, Cycles Render, Daz 3D, DeviantArt, DirectX Render, Doughy Render, Houdini Render, Infini-D Render, KitBash3D, Luxcore Render, Marvelous Designer, MentalRay Render, OctaneRender, Optix Render, Photobashed, Photoshop, physically based render, Pixia, Quixel Megascans, Raylectron Render, Redshift Render, Sketchfab, Substance 3D, Terragen, Unreal Engine, Vray Render, Weta Digital, Zbrush Render\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Photography Styles:\"}),\" daguerreotype, tintype, film negative, Tri-X, Kodachrome, slide film, portra 800, Natura 1600, ilford delta 3200, polaroid, hasselblad, double exposure, multiple exposure, large format camera, wide angle lens, fisheye lens, tilt shift lens, anamorphic, lensbaby, telephoto, prime lens, f1.8, f2.8, f4, f11, f16, photoshoot, commercial, thermographic, x-ray, infrared\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Artists:\"}),\" William Logsdail, Beatrix Potter, Roy Lichtenstein, Richard Corben, Michaelangelo, Gerhard Richter, Bjarke Ingels, John Berkey, George Inness, Peter Andrew Jones, J.M.W. Turner, Todd McFarlane, Caravaggio, Atey Ghailan, Hirohiko Araki, Huang Guangjian, Ray Caesar, Takeshi Obata, Antoine Blanchard, Diego Vel\\xe1zquez, Romero Britto, Guido Borelli da Caluso, Lucas Cranach the Elder, Nele Zirnite, Bob Ross, Zdzislaw Beksinski, Glen Fabry, Jane Graverol, Krenz Cushart\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Colors:\"}),\" black, silver, gray, white, maroon, red, purple, pastel colours, fuchsia, green, lime, olive, yellow, navy, blue, teal, aqua\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Common phrases that can boost your results:\"}),\" masterpiece, trending on artstation, trending on pixiv, vivid, vibrant, geometric, intricate, high quality, high resolution, detailed, 4K\"]})})]})]}),qmKEIZQOx:\"rgb(0, 153, 255)\",V8PWfbvT8:\"how-to-create-effective-prompts-for-ai-image-generation\",vny2uxJff:{alt:\"\",src:new URL(\"assets/HYeWBMZIUZtTcifrD6PWdkAyA.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,srcSet:`${new URL(\"assets/512/HYeWBMZIUZtTcifrD6PWdkAyA.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 512w, ${new URL(\"assets/HYeWBMZIUZtTcifrD6PWdkAyA.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 1024w`},ZckEhR3V3:\"How to create effective prompts for AI image generation\"},{Djh5_J2Mt:\"Guides\",id:\"F4x_KT1Ad\",iP8mvmvMM:\"2022-04-16T00:00:00.000Z\",KbGlbG3Yd:/*#__PURE__*/ _jsxs(React.Fragment,{children:[/*#__PURE__*/ _jsxs(\"p\",{children:[\"Frustrated by not finding a suitable dataset? \u2014 Why not just create your own using Faker? In case you do not know about the library used in this article, \",/*#__PURE__*/ _jsx(Link,{href:\"https://faker.readthedocs.io/en/master/\",openInNewTab:false,smoothScroll:false,children:/*#__PURE__*/ _jsx(\"a\",{children:\"Faker\"})}),\" is a Python package that generates fake data for you. It has a rich set of predefined providers and generators for all sorts of data. This article will help you get started with Faker, talk about its rich built-in providers and generators, walk you through writing your own providers, and go over some good practices related to the use of faker.\"]}),/*#__PURE__*/ _jsx(\"h2\",{children:\"What we will create using Python and Faker?\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Here we will create a dataset for an imaginary telephone directory of businesses based in the UK.\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Our fictional directory has structured data such as:\"}),/*#__PURE__*/ _jsxs(\"ul\",{style:{\"--framer-font-size\":\"22px\",\"--framer-text-alignment\":\"start\",\"--framer-text-color\":\"rgb(60, 72, 78)\",\"--framer-text-transform\":\"none\"},children:[/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:\"Unique ID,\"})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:\"UK companies registration number, \\xa0\"})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:\"Company Name,\"})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:\"Companies contacts firstname,\"})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:\"Companies contacts surname,\"})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:\"Companies address,\"})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:\"Postcode,\"})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:\"and Phone.\"})})]}),/*#__PURE__*/ _jsx(\"p\",{children:\"Let\u2019s get started making our fake yellow pages dataset! No need to scrape actual websites of business directories and break laws just to get some test data for your educational needs.\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Here is how you can make a dataset with some dummy data using Python and Faker.\"}),/*#__PURE__*/ _jsx(\"h2\",{children:\"How do I make a fake dataset in Python with Faker?\"}),/*#__PURE__*/ _jsx(\"h3\",{children:\"1.) Install Faker package\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"We will use Python package called \",/*#__PURE__*/ _jsx(Link,{href:\"https://faker.readthedocs.io/en/master/index.html\",openInNewTab:false,smoothScroll:false,children:/*#__PURE__*/ _jsx(\"a\",{children:\"Faker\"})}),\" to get started. Faker can be described as \u201Ca Python package that generates fake data for you.\u201D By using this package we will save ourselfs time by not writing our own functions that will generete for us rundom fake values.\"]}),/*#__PURE__*/ _jsx(\"p\",{children:\"Faker is easily installable via pip install. To install the Faker package use the pip command as follows:\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"pip install Faker\"})}),/*#__PURE__*/ _jsx(\"h3\",{children:\"2.) Initialize Faker Generator\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Let\u2019s initialize a faker generator and start making some data:\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"from faker import Faker\"})}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"fake = Faker()\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"Now you are done with the installation and initialization of a Faker generator, and everything is ready for you to create any data you want.\"}),/*#__PURE__*/ _jsx(\"h3\",{children:\"3.) Get your head around Faker Providers and Localizations.\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\"3.a - What is a Faker provider?\"})}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:\"fake = Faker()\"}),\" initializes a fake generator which can generate data for different properties based on different data types. Different properties of faker generator are packaged in \u201Cproviders\u201D. Full list of different faker providers can be found \",/*#__PURE__*/ _jsx(Link,{href:\"https://faker.readthedocs.io/en/stable/providers.html\",openInNewTab:false,smoothScroll:false,children:/*#__PURE__*/ _jsx(\"a\",{children:\"here\"})}),\".\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Some of the fake generators for different data types are illustrated below. More detailed use of different providers is given in \",/*#__PURE__*/ _jsx(Link,{href:\"https://github.com/Krishna-Parekh/pythonFaker/blob/master/Faker_providers.ipynb\",openInNewTab:false,smoothScroll:false,children:/*#__PURE__*/ _jsx(\"a\",{children:\"this\"})}),\" notebook.\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\"3.a - What is a Faker localization?\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"Localization allows users to specify data for which location they need Faker package to return. This is important because a list of random Firstnames and Lastnames in US would be diffrent to a list of random Firstnames and Lastnames in Japan. \\xa0\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:/*#__PURE__*/ _jsx(\"em\",{children:\"faker.Faker()\"})}),\" can take a locale as an argument, to return localized data. Default locale is en_US. It has support for variouse languages and locations. Faker supports languages \\xa0like Hindi, French, Spanish, Chinese, Japanese, Arabic, German and \",/*#__PURE__*/ _jsx(Link,{href:\"https://faker.readthedocs.io/en/stable/locales.html\",openInNewTab:false,smoothScroll:false,children:/*#__PURE__*/ _jsx(\"a\",{children:\"many more\"})}),\".\"]}),/*#__PURE__*/ _jsx(\"p\",{children:\"In this article we are generating fake dataset with UK companies data, so we will need Faker localization for UK.\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"To generate UK fake data we will use localization called \",/*#__PURE__*/ _jsx(Link,{href:\"https://faker.readthedocs.io/en/master/locales/en_GB.html\",openInNewTab:false,smoothScroll:false,children:/*#__PURE__*/ _jsx(\"a\",{children:\"en_GB\"})}),\".\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"br\",{}),/*#__PURE__*/ _jsx(\"code\",{children:\"uk_faker = Faker('en_GB')\"})]}),/*#__PURE__*/ _jsx(\"h3\",{children:\"4.) Identify Faker properties that generate the data you are after.\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Desired data sample should have columns with the following data: Unique ID, UK companies registration number, \\xa0company name, companies contacts firstname, companies contacts surname, companies address, postcode, and phone. Let's see how we can generate it using Python and Faker.\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"You will find below faker properties or methods that will help us build profiles for the UK companies.\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"You will need to have \",/*#__PURE__*/ _jsx(\"code\",{children:\"uk_faker\"}),\" at the beginning for properties that are comming from the localization called \",/*#__PURE__*/ _jsx(Link,{href:\"https://faker.readthedocs.io/en/master/locales/en_GB.html\",openInNewTab:false,smoothScroll:false,children:/*#__PURE__*/ _jsx(\"a\",{children:\"en_GB\"})}),\" and \",/*#__PURE__*/ _jsx(\"code\",{children:\"fake\"}),\" for default localization en_US. Remember that we initialized fake generators as \\xa0\",/*#__PURE__*/ _jsx(\"code\",{children:\"uk_faker = Faker('en_GB')\"}),\" and \",/*#__PURE__*/ _jsx(\"code\",{children:\"fake = Faker()\"}),\".\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"UK Company ID: \",/*#__PURE__*/ _jsx(\"code\",{children:\"fake.ean8()\"})]}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Company Name: \",/*#__PURE__*/ _jsx(\"code\",{children:\"fake.company()\"})]}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Contacts Firstname: \",/*#__PURE__*/ _jsx(\"code\",{children:\"uk_faker.first_name()\"})]}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Contacts Firstname: \",/*#__PURE__*/ _jsx(\"code\",{children:\"uk_faker.last_name()\"})]}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"UK Adress: \",/*#__PURE__*/ _jsx(\"code\",{children:\"uk_faker.address()\"})]}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"UK Postcode: \",/*#__PURE__*/ _jsx(\"code\",{children:\"uk_faker.postcode()\"})]}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Phone: \",/*#__PURE__*/ _jsx(\"code\",{children:\"uk_faker.phone_number()\"}),\" or \",/*#__PURE__*/ _jsx(\"code\",{children:\"f'+44 {fake.msisdn()[3:]}'\"})]}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"You can get an idea of how the fake data would look like for each method by printing n number of results in your Jupyter Notebook using \",/*#__PURE__*/ _jsx(\"code\",{children:\"for i in range(<number or results you need>)\"}),\".\"]}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,91TJjE6jeG2Dg3GJxJtwkYqcI.png\",\"data-framer-height\":\"187\",\"data-framer-width\":\"630\",height:\"93\",src:new URL(\"assets/91TJjE6jeG2Dg3GJxJtwkYqcI.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"630 / 187\"},width:\"315\"}),/*#__PURE__*/ _jsx(\"h3\",{children:\"5.) Check that data provided by Faker properties returns the type of data you want.\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"This will give you an idea if the data generated by the method you used is suitable for your needs or not. In order to test output you will need to print more than one returned value bucause values generated by Faker can vary a bit. Here is the exsample of such behaviour.\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,NUTbYYLqiQ2sUCmtmIKB75LMA.png\",\"data-framer-height\":\"186\",\"data-framer-width\":\"763\",height:\"93\",src:new URL(\"assets/NUTbYYLqiQ2sUCmtmIKB75LMA.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"763 / 186\"},width:\"381\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"As we can see \",/*#__PURE__*/ _jsx(\"code\",{children:\"uk_faker.phone_number()\"}),\" generates UK phone numbers but they are not in the same format. If you need phone number that is in the format +44 xxxxxxxxxx you can generate it using \",/*#__PURE__*/ _jsx(\"code\",{children:\"f'+44 {fake.msisdn()[3:]}'\"}),\". Here we define that the start of our phone number is always +44 and generate random ten digits after it with \",/*#__PURE__*/ _jsx(\"code\",{children:\"fake.msisdn()[3:]\"}),\".\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"You will also need to note that values returned by\",/*#__PURE__*/ _jsx(\"code\",{children:\"uk_faker.address()\"}),\" have \",/*#__PURE__*/ _jsx(\"strong\",{children:\"\\\\n \"}),\"in them. This will cause issues during the writing process to the csv.\"]}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,oRrXTKnFe4W3XtpBUYW31V0Ys.png\",\"data-framer-height\":\"388\",\"data-framer-width\":\"655\",height:\"194\",src:new URL(\"assets/oRrXTKnFe4W3XtpBUYW31V0Ys.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"655 / 388\"},width:\"327\"}),/*#__PURE__*/ _jsxs(\"p\",{children:['Fixing this issue is very easy. All you have to do is to replace \"\\\\n\" with the \", \" - ',/*#__PURE__*/ _jsx(\"code\",{children:'uk_faker.address().replace(\"\\\\n\", \", \")'})]}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,p6lwUHQMuDxYSA6FG31V3IsYbI.png\",\"data-framer-height\":\"244\",\"data-framer-width\":\"852\",height:\"122\",src:new URL(\"assets/p6lwUHQMuDxYSA6FG31V3IsYbI.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"852 / 244\"},width:\"426\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Outputs for other methods returned data as expected. These are looking good! Let\u2019s put everything together and create our fake UK companies directory dataset!\"}),/*#__PURE__*/ _jsx(\"h2\",{children:\"6.) Write fake data generated via Python and Faker to a csv file using CSV Python library.\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"br\",{}),\"So it is time to create a csv file with the desired fake data. For this you will need to import python library called csv that will make possible writing to the csv file, initialize a faker generator, define localization, specify how many records do you want to have in your dataset in the cvs file, and finally write to the csv file values returned by the Faker properties that we selected earlier. \\xa0\"]}),/*#__PURE__*/ _jsx(\"p\",{children:\"Here is the script to do just that.\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"import csv\",/*#__PURE__*/ _jsx(\"br\",{}),\"import random\",/*#__PURE__*/ _jsx(\"br\",{}),\"from faker import Faker\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"fake = Faker()\",/*#__PURE__*/ _jsx(\"br\",{}),\"uk_faker = Faker('en_GB')\"]}),/*#__PURE__*/ _jsx(\"p\",{children:\"RECORD_COUNT = 100\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"def writeTo_csv():\",/*#__PURE__*/ _jsx(\"br\",{}),\"with open('my_fake_data_v2.csv', 'w', newline='') as csvfile:\",/*#__PURE__*/ _jsx(\"br\",{}),\"fieldnames = ['ID', 'Company_ID', 'Company_Name', 'Firstname', 'Surname', 'Address', 'Postcode', 'Phone']\",/*#__PURE__*/ _jsx(\"br\",{}),\"seed = 0\",/*#__PURE__*/ _jsx(\"br\",{}),\"writer = csv.DictWriter(csvfile, fieldnames=fieldnames)\",/*#__PURE__*/ _jsx(\"br\",{}),\"writer.writeheader()\",/*#__PURE__*/ _jsx(\"br\",{}),\"for i in range(RECORD_COUNT):\",/*#__PURE__*/ _jsx(\"br\",{}),\"seed += 1\",/*#__PURE__*/ _jsx(\"br\",{}),'writer.writerow({\"ID\": seed, \"Company_ID\": fake.ean8(), \"Company_Name\": fake.company(), \"Firstname\": uk_faker.first_name(), \"Surname\": uk_faker.last_name(), \"Address\": uk_faker.address().replace(\"\\\\n\", \", \"), \"Postcode\": uk_faker.postcode(), \"Phone\": f\\'+44 {fake.msisdn()[3:]}\\' })']}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"if \",/*#__PURE__*/ _jsx(\"strong\",{children:\"name\"}),\" == '\",/*#__PURE__*/ _jsx(\"strong\",{children:\"main\"}),\"':\",/*#__PURE__*/ _jsx(\"br\",{}),\"writeTo_csv()\"]}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,QGtBI6ZqAhucRQmoo2VFkFWtU.png\",\"data-framer-height\":\"1172\",\"data-framer-width\":\"1898\",height:\"586\",src:new URL(\"assets/QGtBI6ZqAhucRQmoo2VFkFWtU.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1898 / 1172\"},width:\"949\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Generated output in the csv file that we just created with Pthon, Faker, and CSV libraries.\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Success!\"})]}),qmKEIZQOx:\"rgb(0, 153, 255)\",V8PWfbvT8:\"generate-huge-datasets-with-fake-data-easily-and-quickly-using-python-and-faker\",vny2uxJff:{alt:\"\",src:new URL(\"assets/8HfLiJpDGYXZ8y2n2jsRQH7uxs.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,srcSet:`${new URL(\"assets/512/8HfLiJpDGYXZ8y2n2jsRQH7uxs.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 512w, ${new URL(\"assets/1024/8HfLiJpDGYXZ8y2n2jsRQH7uxs.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 1024w, ${new URL(\"assets/8HfLiJpDGYXZ8y2n2jsRQH7uxs.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 2000w`},ZckEhR3V3:\"Generate Huge Datasets With Fake Data Easily and Quickly using Python and Faker\"},{Djh5_J2Mt:\"Guides\",id:\"hLjA5SZPi\",iP8mvmvMM:\"2021-03-25T00:00:00.000Z\",KbGlbG3Yd:/*#__PURE__*/ _jsxs(React.Fragment,{children:[/*#__PURE__*/ _jsxs(\"p\",{children:[\"Accessing a single value or updating the value of single row is sometime needed in Python Pandas Dataframe when we don't want to create a new Dataframe for just updating that single cell value. The easiest way to to access a single cell values is via Pandas in-built functions \",/*#__PURE__*/ _jsx(\"code\",{children:\"at\"}),\" and \",/*#__PURE__*/ _jsx(\"code\",{children:\"iat\"}),\".\"]}),/*#__PURE__*/ _jsx(\"h1\",{children:\"Pandas loc vs. iloc vs. at vs. iat?\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"If you are new to Python then you can be a bit confused by the cell localization/selection in Pandas. Don't worry if you are struggling to understand the practical implications of the various localization/selection options. Here is a quick explainer of why you should ever use \",/*#__PURE__*/ _jsx(\"code\",{children:\".loc\"}),\" or \",/*#__PURE__*/ _jsx(\"code\",{children:\".iloc\"}),\" over \",/*#__PURE__*/ _jsx(\"code\",{children:\"at\"}),\", and \",/*#__PURE__*/ _jsx(\"code\",{children:\"iat\"}),\" or vice versa? \\xa0And in what situations should you use which method?\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"loc:\"}),\" only work on index\",/*#__PURE__*/ _jsx(\"br\",{}),/*#__PURE__*/ _jsx(\"strong\",{children:\"iloc:\"}),\" work on position\",/*#__PURE__*/ _jsx(\"br\",{}),/*#__PURE__*/ _jsx(\"strong\",{children:\"at:\"}),\" get scalar values. It's a very fast loc\",/*#__PURE__*/ _jsx(\"br\",{}),/*#__PURE__*/ _jsx(\"strong\",{children:\"iat:\"}),\" Get scalar values. It's a very fast iloc\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:\"at\"}),\" and \",/*#__PURE__*/ _jsx(\"code\",{children:\"iat\"}),\" are meant to access a scalar, that is, a single element in the dataframe, while \",/*#__PURE__*/ _jsx(\"code\",{children:\"loc\"}),\" and \",/*#__PURE__*/ _jsx(\"code\",{children:\"iloc\"}),\" are ments to access several elements at the same time, potentially to perform vectorized operations.\"]}),/*#__PURE__*/ _jsx(\"h2\",{children:\"Forget about .ix!\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Please note that before pandas v0.20 a function called \",/*#__PURE__*/ _jsx(\"code\",{children:\".ix\"}),\" used to exist. This method was later split into two \\xa0\",/*#__PURE__*/ _jsx(\"code\",{children:\"loc\"}),\" and \",/*#__PURE__*/ _jsx(\"code\",{children:\"iloc\"}),\" \\xa0to make the explicit distinction between positional and label based indexing. Please beware that \",/*#__PURE__*/ _jsx(\"code\",{children:\".ix\"}),\" was discontinued due to inconsistent behavior and being hard to grok, and no longer exists in current versions of pandas (>= 1.0). So you can ignore this one.\"]}),/*#__PURE__*/ _jsx(\"h2\",{children:\"How Pandas makes selections from a DataFrame\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"There are two primary ways that Pandas makes selections from a DataFrame.\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"By \",/*#__PURE__*/ _jsx(\"strong\",{children:\"Label\"}),\" By \",/*#__PURE__*/ _jsx(\"strong\",{children:\"Integer Location\"})]}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"There are three primary \",/*#__PURE__*/ _jsx(\"strong\",{children:\"indexers\"}),\" for pandas. We have the indexing operator itself (the brackets \",/*#__PURE__*/ _jsx(\"code\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\"[]\"})}),\"), \",/*#__PURE__*/ _jsx(\"code\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\".loc\"})}),\", and \",/*#__PURE__*/ _jsx(\"code\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\".iloc\"})}),\". Let\u2019s summarize them:\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\"[]\"})}),\" - Primarily selects subsets of columns, but can select rows as well. Cannot simultaneously select rows and columns.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\".loc\"})}),\" - selects subsets of rows and columns by label only\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\".iloc\"})}),\" - selects subsets of rows and columns by integer location only\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\".at\"})}),\" selects a single scalar value in the DataFrame by label only\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\".iat\"})}),\" selects a single scalar value in the DataFrame by integer location only\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"It is worth noting that \",/*#__PURE__*/ _jsx(\"code\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\".at\"})}),\" and \",/*#__PURE__*/ _jsx(\"code\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\".iat\"})}),\" are very similar to \\xa0\",/*#__PURE__*/ _jsx(\"code\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\".loc\"})}),\", and \",/*#__PURE__*/ _jsx(\"code\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\".iloc\"})}),/*#__PURE__*/ _jsx(\"strong\",{children:\". \"}),\"They have same functionality with just a small performance increase. Use those when you have a very time-sensitive application.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"In addition to selection by label and integer location, \",/*#__PURE__*/ _jsx(\"strong\",{children:\"boolean selection\"}),\" also known as \",/*#__PURE__*/ _jsx(\"strong\",{children:\"boolean indexing\"}),\" exists.\"]}),/*#__PURE__*/ _jsx(\"h2\",{children:\"Update Pandas Dataframe cell value by Column Label\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\".at\"})}),/*#__PURE__*/ _jsx(\"em\",{children:\"- Access a single value for a row/column label pair Use at if you only need to get or set a single value in a DataFrame or Series.\"})]}),/*#__PURE__*/ _jsx(\"p\",{children:\"We begin by creating a sample Dataframe:\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\" # creating a simple dataframe df = pd.DataFrame({'name': ['Olivia','Dean','Alex','Jon','Tom','Jane','Kate'], 'age': [32,23,45,35,20,28,55], 'sex':['female', 'male','male','male','male','female','female']})\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"This is how your test Dataframe will look like:\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,AwcRS4bseU7HpRrRcOZQXPzf68.png\",\"data-framer-height\":\"366\",\"data-framer-width\":\"996\",height:\"183\",src:new URL(\"assets/AwcRS4bseU7HpRrRcOZQXPzf68.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"996 / 366\"},width:\"498\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Test python pandas dataframe\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Let\u2019s access cell value with index 2 and Column age. This is an age entry for Alex that is located at index 2.\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"# Let\u2019s access cell value with index 2 and column age df.at[2,'age']\"})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,UQ9V0slgc8wHGzQSbLcvt3qJD1I.png\",\"data-framer-height\":\"96\",\"data-framer-width\":\"997\",height:\"48\",src:new URL(\"assets/UQ9V0slgc8wHGzQSbLcvt3qJD1I.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"997 / 96\"},width:\"498\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Access cell value in Pandas Dataframe by index and column label\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Value 45 is the output when you execute the above line of code.\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Now let\u2019s update this value with 40.\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"# Now let's update cell value with index 2 and Column age # We will replace value of 45 with 40 df.at[2,'age']=40 df\"})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,4PN51DEewdpAQhTgOT4O8iAtU.png\",\"data-framer-height\":\"348\",\"data-framer-width\":\"991\",height:\"174\",src:new URL(\"assets/4PN51DEewdpAQhTgOT4O8iAtU.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"991 / 348\"},width:\"495\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Change cell value in Pandas Dataframe by index and column label\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Now if you run the same comand we run to access cell value with index 2 and column age you will get 40 and not 45 that we had at the start.\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,1EvTkFWEOBCcUUcPhcDyUf8Ogkw.png\",\"data-framer-height\":\"97\",\"data-framer-width\":\"995\",height:\"48\",src:new URL(\"assets/1EvTkFWEOBCcUUcPhcDyUf8Ogkw.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"995 / 97\"},width:\"497\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"You can access cell value via \",/*#__PURE__*/ _jsx(\"code\",{children:\".loc\"}),\" but you can't updated it this way!\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:\"df.loc[index].at['column']\"}),\" or \",/*#__PURE__*/ _jsx(\"code\",{children:\"df.loc[index].at['column']\"})]}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,7CUvlt0BBJ1HvmjwJfOlW9Dnr78.png\",\"data-framer-height\":\"173\",\"data-framer-width\":\"995\",height:\"86\",src:new URL(\"assets/7CUvlt0BBJ1HvmjwJfOlW9Dnr78.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"995 / 173\"},width:\"497\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Access cell value via \",/*#__PURE__*/ _jsx(\"code\",{children:\".loc\"})]}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,I0koTRwzQIicd44f2MKv6amIBk.png\",\"data-framer-height\":\"729\",\"data-framer-width\":\"994\",height:\"364\",src:new URL(\"assets/I0koTRwzQIicd44f2MKv6amIBk.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"994 / 729\"},width:\"497\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"See this does not work\"}),/*#__PURE__*/ _jsx(\"h2\",{children:\"Dataframe cell value by Integer position\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"We can also do the same but instead of using column label we can use column index. \\xa0In earlier exsample we used column label \",/*#__PURE__*/ _jsx(\"em\",{children:\"age\"}),\" which is the same as saying \",/*#__PURE__*/ _jsx(\"em\",{children:\"column 1\"}),\". Don't forget that Python indexing starts at 0. For this we will use \",/*#__PURE__*/ _jsx(\"code\",{children:/*#__PURE__*/ _jsx(\"em\",{children:\"iat\"})}),/*#__PURE__*/ _jsx(\"em\",{children:\".\"})]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:/*#__PURE__*/ _jsx(\"em\",{children:\"iat\"})}),/*#__PURE__*/ _jsx(\"em\",{children:\" - Access a single value for a row/column pair by integer position. Use iat if you only need to get or set a single value in a DataFrame or Series.\"})]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\" # Let\u2019s access cell value with index 1 and Column age (column index 1) df.iat[1, 1]\"})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,P8A8VConRO9df9RGIlPEgLrrA.png\",\"data-framer-height\":\"311\",\"data-framer-width\":\"998\",height:\"155\",src:new URL(\"assets/P8A8VConRO9df9RGIlPEgLrrA.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"998 / 311\"},width:\"499\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Access cell value in Pandas Dataframe by index and column index\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Now let's update cell value with index 1 and column index 1 to 22.\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\" # Now let's update this value df.iat[1, 1]=22 df\"})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,srcJlq0Sy9xkctt0DA3Si2KdsAs.png\",\"data-framer-height\":\"332\",\"data-framer-width\":\"997\",height:\"166\",src:new URL(\"assets/srcJlq0Sy9xkctt0DA3Si2KdsAs.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"997 / 332\"},width:\"498\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Update cell value in Pandas Dataframe by index and column index\"}),/*#__PURE__*/ _jsx(\"h2\",{children:\"Conclusion\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"So you have seen how you can access a cell value and update it using \",/*#__PURE__*/ _jsx(\"code\",{children:\"at\"}),\"and \",/*#__PURE__*/ _jsx(\"code\",{children:\"iat\"}),\"which is meant to access a scalar, that is, a single element in the dataframe, while \",/*#__PURE__*/ _jsx(\"code\",{children:\"loc\"}),\" and \",/*#__PURE__*/ _jsx(\"code\",{children:\"iloc\"}),\"are meant to access several elements at the same time, potentially to perform vectorized operations. Advantage over loc is that this is faster and allows you to update cell value in your Dataframe.\"]})]}),qmKEIZQOx:\"rgb(0, 153, 255)\",V8PWfbvT8:\"how-to-change-or-update-a-cell-value-in-python-pandas-dataframe\",vny2uxJff:{alt:\"\",src:new URL(\"assets/diyeAeeZkhOVQnMXUtLcuMJoG98.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,srcSet:`${new URL(\"assets/512/diyeAeeZkhOVQnMXUtLcuMJoG98.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 512w, ${new URL(\"assets/1024/diyeAeeZkhOVQnMXUtLcuMJoG98.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 1024w, ${new URL(\"assets/diyeAeeZkhOVQnMXUtLcuMJoG98.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 2000w`},ZckEhR3V3:\"How to change or update a specific cell in Python Pandas Dataframe\"},{Djh5_J2Mt:\"Guides\",id:\"wNRSOpVHe\",iP8mvmvMM:\"2021-03-22T00:00:00.000Z\",KbGlbG3Yd:/*#__PURE__*/ _jsxs(React.Fragment,{children:[/*#__PURE__*/ _jsx(\"p\",{children:\"Pandas is a great Python library for data analytics as it makes it relatively simple, but in some cases very simple data modifications that are super simple to make in Excel can be not so straightforward in Pandas. For example, to add a row at the top in Pandas dataframe you need to run multiple commands. Here is a detailed explanation of how you can add a row at the top in Pandas dataframe.\"}),/*#__PURE__*/ _jsx(\"h3\",{children:\"What we want to achieve\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"Let's say that below is our dataframe to which we want to add a row at the top (at index \\xa00):\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,LZleKYd1e8fbzehLiTe4vZH0XSU.png\",\"data-framer-height\":\"134\",\"data-framer-width\":\"161\",height:\"67\",src:new URL(\"assets/LZleKYd1e8fbzehLiTe4vZH0XSU.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"161 / 134\"},width:\"80\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Our original df\\xa0\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"We want to insert a new row at the first position with the following data - name: Alex, age: 45, sex: male. We want to get the following dataframe:\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,vttykISiU565QzQOWblPbzwU0.png\",\"data-framer-height\":\"175\",\"data-framer-width\":\"164\",height:\"87\",src:new URL(\"assets/vttykISiU565QzQOWblPbzwU0.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"164 / 175\"},width:\"82\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"What we want to have in df\"}),/*#__PURE__*/ _jsx(\"h3\",{children:\"Solution 1: using list and pd.concat()\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"This can be done by gathering the new data into a list first and then use \",/*#__PURE__*/ _jsx(\"code\",{children:\"pd.concat([], ignore_index=True)\"}),\" to add it at the top (at index \\xa00) of dataframe.\"]}),/*#__PURE__*/ _jsx(\"p\",{children:\"Please see exsample code below:\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"# importing pandas import pandas as pd # creating a simple dataframe df = pd.DataFrame({'name': ['Jon','Tom','Jane','Kate'], 'age': [35,20,28,55], 'sex':['male','male','female','female']}) data = [] # always inserting new rows at the first position - last row will be always on top data.insert(0, {'name': 'Alex', 'age': 45, 'sex': 'male'}) # Concatanating original dataframe with additional row of data from list pd.concat([pd.DataFrame(data), df], ignore_index=True) # does not save changes to the original dataframe # Saving modified df as df2 df2 = pd.concat([pd.DataFrame(data), df], ignore_index=True) df2\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"Code to add a row of data at the top of Pandas dataframe\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,FoCAAEqXCPh3AAqIkB7ailPc.png\",\"data-framer-height\":\"354\",\"data-framer-width\":\"991\",height:\"177\",src:new URL(\"assets/FoCAAEqXCPh3AAqIkB7ailPc.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"991 / 354\"},width:\"495\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,PYFt4E2cOWYLGOEEhIcReCroag4.png\",\"data-framer-height\":\"412\",\"data-framer-width\":\"997\",height:\"206\",src:new URL(\"assets/PYFt4E2cOWYLGOEEhIcReCroag4.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"997 / 412\"},width:\"498\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"list and pd.concat() example in Jupyter Notebook\\xa0\"}),/*#__PURE__*/ _jsx(\"h3\",{children:\"Solution 2: using loc, index, and sort_index(inplace=True)\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Another way to solve this challenge is by assigning a row to a particular index, using \",/*#__PURE__*/ _jsx(\"code\",{children:\"loc\"}),\" to incert data with index -1 and then modify indexes by adding 1 to all row indexes, so row with index -1 becomes 0 and row that had index 0 changes to\"]}),/*#__PURE__*/ _jsx(\"p\",{children:\"Remember that ealier record for Alex was added to df2, hence why we are adding row for Dean to df2.\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"# remember that df was not modified by code above. Record for Alex was added to df2 # another way of adding a row to the top of Pandas dataframe df2.loc[-1] = ['Dean', '25', 'male'] # adding a row df2.index = df2.index + 1 # shifting index df2.sort_index(inplace=True)\"})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,C5jApYYKomstXckxkCHjOsS9zb4.png\",\"data-framer-height\":\"371\",\"data-framer-width\":\"995\",height:\"185\",src:new URL(\"assets/C5jApYYKomstXckxkCHjOsS9zb4.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"995 / 371\"},width:\"497\"}),/*#__PURE__*/ _jsx(\"p\",{children:\".loc .index and .sort_index(inplace=True) example in Jupyter Notebook\\xa0\"}),/*#__PURE__*/ _jsx(\"h3\",{children:\"Solution 3: using additional dataframe and pd.concat() with .reset_index(drop=True)\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"This solution is very similar to solution 1, we just replace list with additional dataframe than use \",/*#__PURE__*/ _jsx(\"code\",{children:\"pd.concat\"}),\" together with \",/*#__PURE__*/ _jsx(\"code\",{children:\".reset_index(drop=True)\"}),\". Don't forget \\xa0to use \",/*#__PURE__*/ _jsx(\"code\",{children:\".reset_index(drop=True)\"}),\" or you will end up with two rows set to index 0.\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"# adding row to dataframe at index 0 via additional dataframe and pd.concat df3 = pd.DataFrame([['Olivia',32,'female']], columns=['name','age','sex']) df4 = pd.concat([df3, df2]).reset_index(drop=True) df4\"})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,HMDuac57sWtkOJg4LUk58kytSm8.png\",\"data-framer-height\":\"318\",\"data-framer-width\":\"997\",height:\"159\",src:new URL(\"assets/HMDuac57sWtkOJg4LUk58kytSm8.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"997 / 318\"},width:\"498\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"additional df and pd.concat() example in Jupyter Notebook\"})]}),qmKEIZQOx:\"rgb(0, 153, 255)\",V8PWfbvT8:\"how-to-add-a-row-at-the-top-in-pandas-dataframe\",vny2uxJff:{alt:\"\",src:new URL(\"assets/SPhilFEr4Ga0Cbg8gYuFlZB4w.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,srcSet:`${new URL(\"assets/512/SPhilFEr4Ga0Cbg8gYuFlZB4w.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 512w, ${new URL(\"assets/1024/SPhilFEr4Ga0Cbg8gYuFlZB4w.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 1024w, ${new URL(\"assets/SPhilFEr4Ga0Cbg8gYuFlZB4w.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 2000w`},ZckEhR3V3:\"How to add a row at the top in Pandas dataframe\"},{Djh5_J2Mt:\"Guides\",id:\"P5Z8z9W21\",iP8mvmvMM:\"2020-11-15T00:00:00.000Z\",KbGlbG3Yd:/*#__PURE__*/ _jsxs(React.Fragment,{children:[/*#__PURE__*/ _jsx(\"p\",{children:\"In this tutorial, you will learn how to create a WordCloud of your own in Python and customise it as you see fit. Specifically, we will focus on how to generate a WorldCloud from a column in Pandas dataframe. This type of visualisation will be quite handy for exploring text data and making your presentation more lively.\"}),/*#__PURE__*/ _jsx(\"h2\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\"What is a WordCloud?\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"A WorldCloud /Word Cloud (also known as a tag cloud or word art) is a simple visualisation of data, in which words are shown in varying sizes depending on how often they appear in your text/data.\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"There are many free word cloud generators online that can help you perform text analysis, and spot trends and patterns at a glance. Python is not the only tool capable of creating such visuals. So if you need to make a word cloud visualisation quickly and you are not working with your data in Python, then this tutorial is not for you.\"}),/*#__PURE__*/ _jsx(\"h2\",{children:\"Tutorial structure\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"In this tutorial, we will use a rose data scraped from Helpmefind.com, but you can use any other data set to learn:\"}),/*#__PURE__*/ _jsxs(\"ul\",{style:{\"--framer-font-size\":\"22px\",\"--framer-text-alignment\":\"start\",\"--framer-text-color\":\"rgb(60, 72, 78)\",\"--framer-text-transform\":\"none\"},children:[/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:\"How to create a WorldCloud from a column in Pandas dataframe\"})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:\"Mask your WordCloud into any shape of your choice\"})})]}),/*#__PURE__*/ _jsx(\"h2\",{children:\"WorldCloud install \\xa0\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"In order to create a WorldCloud viz in Python you will need to install below packages:\"}),/*#__PURE__*/ _jsxs(\"ul\",{style:{\"--framer-font-size\":\"22px\",\"--framer-text-alignment\":\"start\",\"--framer-text-color\":\"rgb(60, 72, 78)\",\"--framer-text-transform\":\"none\"},children:[/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(Link,{href:\"http://www.numpy.org/\",openInNewTab:false,smoothScroll:false,children:/*#__PURE__*/ _jsx(\"a\",{children:\"numpy\"})})})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(Link,{href:\"https://pandas.pydata.org/\",openInNewTab:false,smoothScroll:false,children:/*#__PURE__*/ _jsx(\"a\",{children:\"pandas\"})})})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(Link,{href:\"https://matplotlib.org/index.html\",openInNewTab:false,smoothScroll:false,children:/*#__PURE__*/ _jsx(\"a\",{children:\"matplotlib\"})})})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:\"os\"})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(Link,{href:\"https://pillow.readthedocs.io/en/5.1.x/\",openInNewTab:false,smoothScroll:false,children:/*#__PURE__*/ _jsx(\"a\",{children:\"pillow\"})})})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(Link,{href:\"https://github.com/amueller/word_cloud\",openInNewTab:false,smoothScroll:false,children:/*#__PURE__*/ _jsx(\"a\",{children:\"wordcloud\"})})})})]}),/*#__PURE__*/ _jsx(\"p\",{children:\"First four packages are data analytics staples, so don't require an introduction.\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"The \",/*#__PURE__*/ _jsx(\"code\",{children:\"pillow\"}),\" library is a package that enables image reading. You can find a tutorial for pillow \",/*#__PURE__*/ _jsx(Link,{href:\"https://pillow.readthedocs.io/en/5.1.x/handbook/tutorial.html\",openInNewTab:false,smoothScroll:false,children:/*#__PURE__*/ _jsx(\"a\",{children:\"here\"})}),\". Pillow is a wrapper for PIL - Python Imaging Library. You will need this library to read in an image as the mask for the WordCloud.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"The \",/*#__PURE__*/ _jsx(\"code\",{children:\"wordcloud\"}),\" library is the one responsible for creating WorldClouds. It can be a little tricky to install. If you only need it for plotting a basic WordCloud, then running one of the commands below would be sufficient.\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"pip install wordcloud\"})}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"or \",/*#__PURE__*/ _jsx(\"code\",{children:\"conda install -c conda-forge wordcloud\"}),\" for Anaconda-Navigator.\"]}),/*#__PURE__*/ _jsx(\"p\",{children:\"However, if you are after the library with the ability to mask the cloud into any shape of your choice, you will need the latest version that requires a different method of installation.\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"git clone https://github.com/amueller/word_cloud.git cd word_cloud pip install .\"})}),/*#__PURE__*/ _jsxs(\"h2\",{children:[\"Import Libraries & \",/*#__PURE__*/ _jsx(\"strong\",{children:\"Create a Dataframe\"})]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"# Importing libraries import numpy as np import pandas as pd from os import path from PIL import Image from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator import matplotlib.pyplot as plt # Run below comand if you are running IPython % matplotlib inline\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"Magic command %matplotlib inline will make your plot outputs appear and be stored within the notebook.\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Next step is to import your csv file with data and create Pandas dataframe from it.\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:'# Creating dataframe from csv # Dataframe name is df1 df1 = pd.read_csv(\\'Helpmefind_roses_merged_cleanned.csv\\') # My file did not have titles so I manually assigned them df1.columns = [\"Unnamed: 0\",\"NAME\",\"URL\",\"SYNONYM\",\"ARS\",\"ORIG\",\"CLASS\",\"BLOOM\",\"HABIT\",\"GROWING\",\"PARENTAGE\",\"COMMENTS\",\"BRED_BY\",\"INTRODUCED_FULL\", \"INTRODUCED\", \"YEAR_CREATED\", \"BRED_BY_DOB\", \"ALL_YEARS\", \"COUNTRY\", \"EXH_NAME\",\"REGISTR_NAME\", \"PETALS\", \"COLOR\", \"PETALS2\", \"PETALS3\", \"ALL_PETALS_BRACKETS\", \"MAIN_COLOR\" ] # Then I removed column \"Unnamed: 0\" del df1[\\'Unnamed: 0\\'] # Listing basic info about the file # Just to check that everything imported correctly from the csv file df1.info()'})}),/*#__PURE__*/ _jsx(\"p\",{children:\"Below you can see info about my dataset:\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,mXeLCoVz8Q57QBqjhZ8rfgDqhT8.png\",\"data-framer-height\":\"596\",\"data-framer-width\":\"564\",height:\"298\",src:new URL(\"assets/mXeLCoVz8Q57QBqjhZ8rfgDqhT8.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"564 / 596\"},width:\"282\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"In this article, I will demonstrate how easy it is to make your own worldcloud visuals from a column in Pandas datafreame. As an example, I will use a column named BLOOM from my dataframe named df1. Below you can see the first ten rows from the dataframe.\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,3hWTjbWvaaCO9uTpWvm6syG2es.png\",\"data-framer-height\":\"356\",\"data-framer-width\":\"987\",height:\"178\",src:new URL(\"assets/3hWTjbWvaaCO9uTpWvm6syG2es.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"987 / 356\"},width:\"493\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"How column BLOOM looks like\"}),/*#__PURE__*/ _jsx(\"h2\",{children:\"Create a simple WordCloud visual from a column in Pandas dataframe\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"In this step, we create two important strings for our WorldCloud generation.\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"WordCloud.generate(text) method will generate wordcloud from text.\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"The WordCloud method expects a text file / a string on which it will count the word instances. But we want to use it on Pandas dataframe, so we will need to transform our input for it to work with the \",/*#__PURE__*/ _jsx(\"code\",{children:\"WordCloud.generate()\"}),\" method.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"The \u2018\",/*#__PURE__*/ _jsx(\"em\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\"text\"})}),\"\u2019 is the string that will be used to store all the words from your column in a single line of text.\"]}),/*#__PURE__*/ _jsx(\"p\",{children:\"This you can do in the following way:\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Firstly, you will need to create a text list of all words in column bloom.\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:'text = \" \".join(review for review in df.YOUR_COLUMN_NAME.astype(str))'})}),/*#__PURE__*/ _jsx(\"p\",{children:\"Secondly, you will need to print how many words are in the text list that you just created from the Pandas column.\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:'print (\"There are {} words in the combination of all cells in column YOUR_COLUMN_NAME.\".format(len(text)))'})}),/*#__PURE__*/ _jsx(\"p\",{children:\"Next step is to create a list of stop words.\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"The \u2018\",/*#__PURE__*/ _jsx(\"em\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\"stopwords\"})}),\"\u2019 list is used to store all the words that are very commonly used in the English language such as \u2018the\u2019, \u2018a\u2019, \u2018an\u2019, \u2018in\u2019. Plus you can add any other words that you don't want to go in your world cloud. These words will be later filtered while generating the word cloud.\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"stopwords = set(STOPWORDS)\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"If you need to add any custom word exclusions use below:\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:'stopwords.update([\"bloom\", \"rose\", \"petals\", \"Average\", \"diameter\",\"flushes\", \\'throughout\\', \"Blooms\", \"form\"])'})}),/*#__PURE__*/ _jsx(\"p\",{children:\"In the above example, I am excluding words: bloom, rose, petals, average, diameter, flushes, throughout, blooms, and form. You will need to replace those with your custom word exclusions.\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"br\",{}),\"Now we are finally ready to generate a WorldCloud image. It is time to run\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"WorldClound().generate(text)\"})}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"It accepts the following \",/*#__PURE__*/ _jsx(\"strong\",{children:\"Parameters\"}),\":\"]}),/*#__PURE__*/ _jsxs(\"ul\",{style:{\"--framer-font-size\":\"22px\",\"--framer-text-alignment\":\"start\",\"--framer-text-color\":\"rgb(60, 72, 78)\",\"--framer-text-transform\":\"none\"},children:[/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"font_path\"}),\" : string - Font path to the font that will be used (OTF or TTF).\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"width : int(default=400)\"}),\" - Width of the canvas.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"height\"}),\"int : int(default=200) - Height of the canvas.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"prefer_horizontal\"}),\" : float (default=0.90) -The ratio of times to try horizontal fitting as opposed to vertical. If prefer_horizontal < 1, the algorithm will try rotating the word if it doesn\u2019t fit. (There is currently no built-in way to get only vertical words.)\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"mask\"}),\" : nd-array or None (default=None) - If not None, gives a binary mask on where to draw words. If mask is not None, width and height will be ignored and the shape of mask will be used instead. All white (#FF or #FFFFFF) entries will be considerd \u201Cmasked out\u201D while other entries will be free to draw on. [This changed in the most recent version!]\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"contour_width: float (default=0)\"}),\" - If mask is not None and contour_width > 0, draw the mask contour.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"contour_color: color value (default=\u201Dblack\u201D)\"}),\" - Mask contour color.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"scale\"}),\" : float (default=1) - Scaling between computation and drawing. For large word-cloud images, using scale instead of larger canvas size is significantly faster, but might lead to a coarser fit for the words.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"min_font_size\"}),\" : int (default=4) - Smallest font size to use. Will stop when there is no more room in this size.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"font_step\"}),\" : int (default=1) - Step size for the font. font_step > 1 might speed up computation but give a worse fit.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"max_words\"}),\" : number (default=200) - The maximum number of words.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"stopwords\"}),\" : set of strings or None - The words that will be eliminated. If None, the build-in STOPWORDS list will be used. Ignored if using generate_from_frequencies.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"background_color\"}),\" : color value (default=\u201Dblack\u201D) - Background color for the word cloud image.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"max_font_size\"}),\" : int or None (default=None) - Maximum font size for the largest word. If None, height of the image is used.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"mode\"}),\" : string (default=\u201DRGB\u201D) - Transparent background will be generated when mode is \u201CRGBA\u201D and background_color is None.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"relative_scaling\"}),\" : float (default=\u2019auto\u2019) - Importance of relative word frequencies for font-size. With relative_scaling=0, only word-ranks are considered. With relative_scaling=1, a word that is twice as frequent will have twice the size. If you want to consider the word frequencies and not only their rank, relative_scaling around .5 often looks good. If \u2018auto\u2019 it will be set to 0.5 unless repeat is true, in which case it will be set to 0.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"color_func\"}),\" : callable, default=None - Callable with parameters word, font_size, position, orientation, font_path, random_state that returns a PIL color for each word. Overwrites \u201Ccolormap\u201D. See colormap for specifying a matplotlib colormap instead. To create a word cloud with a single color, use \",/*#__PURE__*/ _jsx(\"code\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:'color_func=lambda *args, **kwargs: \"white\"'})}),\". The single color can also be specified using RGB code. For example\",/*#__PURE__*/ _jsx(\"code\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\"color_func=lambda *args, **kwargs: (255,0,0)\"})}),\" sets color to red.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"regexp\"}),\" : string or None (optional) - Regular expression to split the input text into tokens in process_text. If None is specified, \",/*#__PURE__*/ _jsx(\"code\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:'r\"\\\\w[\\\\w\\']+\"'})}),\" is used. Ignored if using generate_from_frequencies.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"collocations\"}),\" : bool, default=True - Whether to include collocations (bigrams) of two words. Ignored if using generate_from_frequencies.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"colormap\"}),\" : string or matplotlib colormap, default=\u201Dviridis\u201D - Matplotlib colormap to randomly draw colors from for each word. Ignored if \u201Ccolor_func\u201D is specified.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"normalize_plurals\"}),\" : bool, default=True - Whether to remove trailing \u2018s\u2019 from words. If True and a word appears with and without a trailing \u2018s\u2019, the one with trailing \u2018s\u2019 is removed and its counts are added to the version without trailing \u2018s\u2019 \u2013 unless the word ends with \u2018ss\u2019. Ignored if using generate_from_frequencies.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"repeat\"}),\" : bool, default=False - Whether to repeat words and phrases until max_words or min_font_size is reached.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"include_numbers\"}),\" : bool, default=False - Whether to include numbers as phrases or not.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"min_word_length\"}),\" : int, default=0 - Minimum number of letters a word must have to be included.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"collocation_threshold: int, default=30\"}),\" - Bigrams must have a Dunning likelihood collocation score greater than this parameter to be counted as bigrams. Default of 30 is arbitrary.\"]})})]}),/*#__PURE__*/ _jsx(\"p\",{children:\"If you want to generate a world cloud with stopwords excluded, with a white background, a width of 800, and a height of 400 then run below.\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:'wordcloud = WordCloud(stopwords=stopwords, background_color=\"white\", width=800, height=400).generate(text)'})}),/*#__PURE__*/ _jsx(\"p\",{children:\"Please remember that you can specify your look of the word cloud using parameters.\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Now that you generated a world cloud, it is time to display it in your notebook using matplotlib.\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:'plt.axis(\"off\")'})}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"plt.figure( figsize=40,20)\"})}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"plt.tight_layout(pad=0)\"})}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"plt.imshow(wordcloud, interpolation='bilinear')\"})}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"plt.show()\"})}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"You may wonder why we use the argument \",/*#__PURE__*/ _jsx(\"code\",{children:'interpolation=\"bilinear\"'}),\" in the \",/*#__PURE__*/ _jsx(\"code\",{children:\"plt.imshow()\"}),\". This is to make the displayed image appear more smoothly.\"]}),/*#__PURE__*/ _jsx(\"p\",{children:\"Let's combine all lines of code that we need to run in order to make \\xa0a WordCloud vis for column BLOOM.\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:'# Python program to generate WordCloud for column BLOOM # Text of all words in column bloom text = \" \".join(review for review in df1.BLOOM.astype(str)) print (\"There are {} words in the combination of all cells in column BLOOM.\".format(len(text))) # Create stopword list: # remove words that we want to exclude stopwords = set(STOPWORDS) stopwords.update([\"bloom\", \"rose\", \"petals\", \"Average\", \"diameter\",\"flushes\", \\'throughout\\', \"Blooms\", \"form\"]) # Generate a word cloud image wordcloud = WordCloud(stopwords=stopwords, background_color=\"white\", width=800, height=400).generate(text) # Display the generated image: # the matplotlib way: plt.axis(\"off\") plt.figure( figsize=(40,20)) plt.tight_layout(pad=0) plt.imshow(wordcloud, interpolation=\\'bilinear\\') plt.show()'})}),/*#__PURE__*/ _jsx(\"p\",{children:\"Above code will produce the following message and a Worldcloud based on words in column BLOOM inside Dataframe df1.\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,TfaHS0roruf1fYElKtLXd6HnhrA.png\",\"data-framer-height\":\"41\",\"data-framer-width\":\"984\",height:\"20\",src:new URL(\"assets/TfaHS0roruf1fYElKtLXd6HnhrA.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"984 / 41\"},width:\"492\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,cgqUMsZVYMAIHel26PIBAq78R8M.png\",\"data-framer-height\":\"499\",\"data-framer-width\":\"982\",height:\"249\",src:new URL(\"assets/cgqUMsZVYMAIHel26PIBAq78R8M.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"982 / 499\"},width:\"491\"}),/*#__PURE__*/ _jsx(\"h2\",{children:\"Mask your wordcloud into any shape of your choice\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Now, let's create a rose-shaped word cloud for words in column BLOOM.\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Seriously, you can use any shape you want with the WorldCloud method in Python.\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"To create a shape for your WordCloud, first, you need to find a JPG file to become the mask. Below is a simple rose shape that I found on the internet:\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,vYcChj9lYqwyYQSLGSp4imnw.jpg\",\"data-framer-height\":\"975\",\"data-framer-width\":\"1024\",height:\"487\",src:new URL(\"assets/vYcChj9lYqwyYQSLGSp4imnw.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1024 / 975\"},width:\"512\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Rose shape for WorldCloud\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Not all mask images are the same so expect different outcomes. Some may not work with the WordCloud function. To make sure that your mask works, let's take a look at it in the NumPy array form:\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:'# converting jpg image to a numpy array rose_mask = np.array(Image.open(\"1599661.jpg\")) rose_mask'})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,nrwZz3nZUnlniLChxP10UFBQOik.png\",\"data-framer-height\":\"847\",\"data-framer-width\":\"364\",height:\"423\",src:new URL(\"assets/nrwZz3nZUnlniLChxP10UFBQOik.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"364 / 847\"},width:\"182\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"rose_mask array\"}),/*#__PURE__*/ _jsx(\"p\",{children:'The way the masking functions works is that it requires all-white part of the mask should be 255. If you use a JPG file then you should get 255 in your array, while PNG file will populate your array with 0 (integer type). This value represents the \"intensity\" of the pixel. Values of 255 are pure white, whereas values of 1 are black. Please note that WorldCloud will not work with the PNG image straight away and you will need to transform it in order for it to work correctly.'}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"br\",{}),\"Rose_mask array is populated with the 255, so everything is ready for the next stage.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Lets' make a wordcloud with the selected shape. Notice in the \",/*#__PURE__*/ _jsx(\"code\",{children:\"WordCloud\"}),\" function, there is a \",/*#__PURE__*/ _jsx(\"code\",{children:\"mask\"}),\" argument that takes in the mask that you created from the JPG image above. The \",/*#__PURE__*/ _jsx(\"code\",{children:\"contour_width\"}),\" and \",/*#__PURE__*/ _jsx(\"code\",{children:\"contour_color\"}),\" are arguments that allow you to adjust the outline characteristics of the cloud.\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:'# Create a word cloud image wc = WordCloud(background_color=\"white\", max_words=100, mask=rose_mask, stopwords=stopwords, contour_width=3, contour_color=\\'green\\') # Generate a wordcloud wc.generate(text) # store to file wc.to_file(\"rose_bloom.png\") # show plt.figure(figsize=[20,10]) plt.imshow(wc, interpolation=\\'bilinear\\') plt.axis(\"off\") plt.show()'})}),/*#__PURE__*/ _jsx(\"p\",{children:\"Hurray! You created a wordcloud in the shape of a rose!\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,pj6zNvaX4tJh5KeiJPuhzKitA.png\",\"data-framer-height\":\"564\",\"data-framer-width\":\"769\",height:\"282\",src:new URL(\"assets/pj6zNvaX4tJh5KeiJPuhzKitA.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"769 / 564\"},width:\"384\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Worldcloud in the shape of a rose\"})]}),qmKEIZQOx:\"rgb(0, 153, 255)\",V8PWfbvT8:\"creating-wordclouds-in-python\",vny2uxJff:{alt:\"\",src:new URL(\"assets/qTuOv84y0ujRLJdNKZkjuvULSA.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,srcSet:`${new URL(\"assets/512/qTuOv84y0ujRLJdNKZkjuvULSA.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 512w, ${new URL(\"assets/1024/qTuOv84y0ujRLJdNKZkjuvULSA.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 1024w, ${new URL(\"assets/qTuOv84y0ujRLJdNKZkjuvULSA.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 2000w`},ZckEhR3V3:\"Creating WordClouds in Python from a single-column in Pandas dataframe\"},{Djh5_J2Mt:\"Guides\",id:\"yuxql6Hwi\",iP8mvmvMM:\"2020-09-09T00:00:00.000Z\",KbGlbG3Yd:/*#__PURE__*/ _jsxs(React.Fragment,{children:[/*#__PURE__*/ _jsxs(\"p\",{children:[\"If you need a refresher on how Regular Expressions work, check out my \",/*#__PURE__*/ _jsx(Link,{href:\"https://re-thought.com/ghost/#/editor/post/5f535b2157a93045e4d906df\",openInNewTab:false,smoothScroll:false,children:/*#__PURE__*/ _jsx(\"a\",{children:\"RegEx guide\"})}),\" first! This tutorial will walk you through pattern extraction from one Pandas column to another using detailed RegEx examples.\"]}),/*#__PURE__*/ _jsx(\"p\",{children:\"When I was doing data cleaning for a scraped rose data, I was challenged by a Regex pattern two digits followed by to and then by two digits again. I was surprised that I could not find such a pattern/Regex on the web, so here is an explainer. Plus a few other Regex examples that I had to create to clean my data.\"}),/*#__PURE__*/ _jsx(\"h3\",{children:\"Sample dataframe\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Let's create a simplified Pandas dataframe that is similar to the one I was cleaning when I encountered the Regex challenge. In the dataframe, we have a column BLOOM that contains a number of petals that we want to extract in a separate column. A number of petals is defined in one of the following ways:\"}),/*#__PURE__*/ _jsxs(\"ul\",{style:{\"--framer-font-size\":\"22px\",\"--framer-text-alignment\":\"start\",\"--framer-text-color\":\"rgb(60, 72, 78)\",\"--framer-text-transform\":\"none\"},children:[/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:\"2 digits to 2 digits (26 to 40),\"})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:\"2 digits - 2 digits (26-40),\"})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:\"as text inside brackets (26-40 petals),\"})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:\"or as 2 digits petals.\"})})]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"# initialize list of lists data = [['Evert van Dijk', 'Carmine-pink, salmon-pink streaks, stripes, flecks. Warm pink, clear carmine pink, rose pink shaded salmon. Mild fragrance. Large, very double, in small clusters, high-centered bloom form. Blooms in flushes throughout the season.'], ['Every Good Gift', 'Red. Flowers velvety red. Moderate fragrance. Average diameter 4\\\". Medium-large, full (26-40 petals), borne mostly solitary bloom form. Blooms in flushes throughout the season.'], ['Evghenya', 'Orange-pink. 75 petals. Large, very double bloom form. Blooms in flushes throughout the season.'], ['Evita', 'White or white blend. None to mild fragrance. 35 petals. Large, full (26-40 petals), high-centered bloom form. Blooms in flushes throughout the season.'], ['Evrathin', 'Light pink. [Deep pink.] Outer petals white. Expand rarely. Mild fragrance. 35 to 40 petals. Average diameter 2.5\\\". Medium, double (17-25 petals), full (26-40 petals), cluster-flowered, in small clusters bloom form. Prolific, once-blooming spring or summer. Glandular sepals, leafy sepals, long sepals buds.'], ['Evita 2', 'White, blush shading. Mild, wild rose fragrance. 20 to 25 petals. Average diameter 1.25\\\". Small, very double, cluster-flowered bloom form. Blooms in flushes throughout the season.']] # Create the pandas DataFrame df = pd.DataFrame(data, columns = ['NAME', 'BLOOM']) # print dataframe. df\"})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,NuBK9iespRObNlTyDvqIwiMBZs.png\",\"data-framer-height\":\"508\",\"data-framer-width\":\"1970\",height:\"254\",src:new URL(\"assets/NuBK9iespRObNlTyDvqIwiMBZs.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1970 / 508\"},width:\"985\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Sample dataframe\"}),/*#__PURE__*/ _jsx(\"h3\",{children:\"Pandas extract column\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"If you need to extract data that matches regex pattern from a column in Pandas dataframe you can use \",/*#__PURE__*/ _jsx(Link,{href:\"https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.str.extract.html#pandas.Series.str.extract\",openInNewTab:false,smoothScroll:false,children:/*#__PURE__*/ _jsx(\"a\",{children:\"extract method in Pandas\"})}),\" \",/*#__PURE__*/ _jsx(\"code\",{children:\"pandas.Series.str.extract\"}),\". This method works on the same line as the Pythons re module. It's really helpful if you want to find the names starting with a particular character or search for a pattern within a dataframe column or extract the dates from the text.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Pandas extract syntax is \\xa0\",/*#__PURE__*/ _jsx(\"code\",{children:\"Series.str.extract(*args, **kwargs)\"})]}),/*#__PURE__*/ _jsx(\"p\",{children:\"Parameters:\"}),/*#__PURE__*/ _jsxs(\"ul\",{style:{\"--framer-font-size\":\"22px\",\"--framer-text-alignment\":\"start\",\"--framer-text-color\":\"rgb(60, 72, 78)\",\"--framer-text-transform\":\"none\"},children:[/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"pat \"}),\"(str) \",/*#__PURE__*/ _jsx(\"strong\",{children:\"- \"}),\"Regular expression pattern with capturing groups.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"flags \"}),\"(int), default 0 (no flags)\",/*#__PURE__*/ _jsx(\"strong\",{children:\" -\"}),\"Flags from the \",/*#__PURE__*/ _jsx(\"code\",{children:\"re\"}),\" module, e.g. \",/*#__PURE__*/ _jsx(\"code\",{children:\"re.IGNORECASE\"}),\", that modify regular expression matching for things like case, spaces, etc. For more details, see \",/*#__PURE__*/ _jsx(\"code\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\"re\"})}),\".\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"expand (\"}),\"bool), default True\",/*#__PURE__*/ _jsx(\"strong\",{children:\" - \"}),\"If True, return DataFrame with one column per capture group. If False, return a Series/Index if there is one capture group or DataFrame if there are multiple capture groups.\"]})})]}),/*#__PURE__*/ _jsx(\"h3\",{children:\"RegEx examples\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"When I started to clean the data, my initial approach was to get all the data in the brackets.\"}),/*#__PURE__*/ _jsx(\"ul\",{style:{\"--framer-font-size\":\"22px\",\"--framer-text-alignment\":\"start\",\"--framer-text-color\":\"rgb(60, 72, 78)\",\"--framer-text-transform\":\"none\"},children:/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[\"Regex for text inside brackets like (26-40 petals) - \\xa0\",/*#__PURE__*/ _jsx(\"code\",{children:\"(\\\\\\\\(.*?)\\\\\\\\)\"}),\" or as raw string \\xa0as \",/*#__PURE__*/ _jsx(\"code\",{children:\"r'(\\\\(.*?)\\\\)'\"})]})})}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"#coping content in column BLOOM inside #first brackets into new column PETALS df['PETALS'] = df['BLOOM'].str.extract('(\\\\\\\\(.*?)\\\\\\\\)', expand=False).str.strip() df['PETALS'] = df['PETALS'].str.replace(\\\"(\\\",\\\"\\\") #same as above but regex defined as raw string df['PETALS_R'] = df['BLOOM'].str.extract(r'(\\\\(.*?)\\\\)', expand=False).str.strip() df['PETALS_R'] = df['PETALS_R'].str.replace(\\\"(\\\",\\\"\\\") # #coping content in column BLOOM inside all brackets into new column ALL_PETALS_BRACKETS df['ALL_PETALS_BRACKETS'] = df['BLOOM'].str.findall('(\\\\\\\\(.*?)\\\\\\\\)') df[['NAME','BLOOM','PETALS', 'PETALS_R', 'ALL_PETALS_BRACKETS']]\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"Pandas extract method with Regex\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,x357yhZYR4ZhjhadGBTDybXTWVw.png\",\"data-framer-height\":\"303\",\"data-framer-width\":\"992\",height:\"151\",src:new URL(\"assets/x357yhZYR4ZhjhadGBTDybXTWVw.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"992 / 303\"},width:\"496\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"df after the code above run\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Then I realised that this method was not returning to all cases where petal data was provided. For example, row 5 has entry 20 to 25 petals that is not in brackets. While row 4 has entry 35 to 40 petals as well as two brackets containing a number of petals for various types of bloom.\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Such patterns we can extract with the following RegExs:\"}),/*#__PURE__*/ _jsxs(\"ul\",{style:{\"--framer-font-size\":\"22px\",\"--framer-text-alignment\":\"start\",\"--framer-text-color\":\"rgb(60, 72, 78)\",\"--framer-text-transform\":\"none\"},children:[/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[\"2 digits to 2 digits (26 to 40) - \\xa0\",/*#__PURE__*/ _jsx(\"code\",{children:\"r'(\\\\d{2}\\\\s+to\\\\s+\\\\d{2})'\"})]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[\"2 digits - 2 digits (26-40) - \\xa0\",/*#__PURE__*/ _jsx(\"code\",{children:\"r'(\\\\d{2}-\\\\d{2})'\"})]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:['or as 2 digits followed by word \"petals\" (35 petals) - ',/*#__PURE__*/ _jsx(\"code\",{children:\"r'(\\\\d{2}\\\\s+petals+.)'\"})]})})]}),/*#__PURE__*/ _jsx(\"p\",{children:\"In above RegExs I use:\"}),/*#__PURE__*/ _jsxs(\"ul\",{style:{\"--framer-font-size\":\"22px\",\"--framer-text-alignment\":\"start\",\"--framer-text-color\":\"rgb(60, 72, 78)\",\"--framer-text-transform\":\"none\"},children:[/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:\"r\"}),\" to mark my RegEx (string) as a raw string, which does not escape metacharecters.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:\"\\\\d\"}),\" - Matches any decimal digit. Equivalent to any single numeral 0 to 9.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:\"{}\"}),\" - Whatever precedes braces \",/*#__PURE__*/ _jsx(\"code\",{children:\"{n}\"}),\" will be repeated at least n times.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:\"\\\\s\"}),' - Matches where a string contains any whitespace character. Equivalent to any space, tab, or newline charecter. (Think of this as matching \"space\" charecters.)']})})]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"# ?<! is for negative look behind # works on sample df but not on the df with my scraped data df['PETALS1'] = df['BLOOM'].str.extract(r'(?<!\\\\d)(\\\\d{2}\\\\s+to\\\\s+\\\\d{2})\\\\s*petal', expand=False) # modification that works on our sample df and on my main df. # now lets copy part of column BLOOM that matches regex patern two digits to two digits df['PETALS2'] = df['BLOOM'].str.extract(r'(\\\\d{2}\\\\s+to\\\\s+\\\\d{2})', expand=False).str.strip() # also came across cases where pattern is two digits followed by word \\\"petals\\\" #now lets copy part of column BLOOM that matches regex patern two digits followed by word \\\"petals\\\" df['PETALS3'] = df['BLOOM'].str.extract(r'(\\\\d{2}\\\\s+petals+\\\\.)', expand=False).str.strip() # now lets copy part of column BLOOM that matches regex patern two digits hyphen two digits followed by word \\\"petals\\\" df['PETALS4'] = df['BLOOM'].str.extract(r'(\\\\d{2}-\\\\d{2}\\\\s+petals)', expand=False).str.strip() df\"})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,UG7Pn3GEi5MUgNUN0GK4gWnCk.png\",\"data-framer-height\":\"382\",\"data-framer-width\":\"986\",height:\"191\",src:new URL(\"assets/UG7Pn3GEi5MUgNUN0GK4gWnCk.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"986 / 382\"},width:\"493\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Hurrah, we have petals data extracted in separate columns.\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Now let's create one master column for petals data. In this case, the master column will be column PETALS1.\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"This loop will replace null in column PETALS1 with value in column PETALS4.\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"# if column PETALS1 is null then replace # with value in column PETALS4 for i, row in df.iterrows(): if (pd.isnull(row['PETALS1'])): row['PETALS1'] = row['PETALS4'] df[['BLOOM','PETALS', 'PETALS2', 'PETALS3', 'PETALS4','ALL_PETALS_BRACKETS','PETALS1']]\"})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,lA1bo0Ec5akrVqNOvA8twLwGEE.png\",\"data-framer-height\":\"347\",\"data-framer-width\":\"983\",height:\"173\",src:new URL(\"assets/lA1bo0Ec5akrVqNOvA8twLwGEE.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"983 / 347\"},width:\"491\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"This loop will replace null in column PETALS1 with value in column PETALS3.\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"# if column PETALS1 is still null then replace # with value in column PETALS3 for i, row in df.iterrows(): if (pd.isnull(row['PETALS1'])): row['PETALS1'] = row['PETALS3'] df[['BLOOM','PETALS', 'PETALS2', 'PETALS3', 'PETALS4','ALL_PETALS_BRACKETS','PETALS1']]\"})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,nXU3YZAADQsuoszTR9POdEfNhg.png\",\"data-framer-height\":\"354\",\"data-framer-width\":\"983\",height:\"177\",src:new URL(\"assets/nXU3YZAADQsuoszTR9POdEfNhg.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"983 / 354\"},width:\"491\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Do your happy dance. Now you have all petals data in column PETALS1 that is available in column BLOOM. I hope that those examples helped you understand RegExs better.\"})]}),qmKEIZQOx:\"rgb(0, 153, 255)\",V8PWfbvT8:\"python-regex-example-for-pattern-2-digits-to-2-digits-26-to-40\",vny2uxJff:{alt:\"\",src:new URL(\"assets/ojuMgn8eDXnp6nOSOJRf8UzPyXs.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,srcSet:`${new URL(\"assets/512/ojuMgn8eDXnp6nOSOJRf8UzPyXs.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 512w, ${new URL(\"assets/1024/ojuMgn8eDXnp6nOSOJRf8UzPyXs.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 1024w, ${new URL(\"assets/ojuMgn8eDXnp6nOSOJRf8UzPyXs.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 2000w`},ZckEhR3V3:\"Python Regex examples - How to use Regex with Pandas\"},{Djh5_J2Mt:\"Guides\",id:\"B0t4KXQDx\",iP8mvmvMM:\"2020-09-15T00:00:00.000Z\",KbGlbG3Yd:/*#__PURE__*/ _jsxs(React.Fragment,{children:[/*#__PURE__*/ _jsxs(\"p\",{children:[\"In this tutorial, you will learn about regular expressions, called RegExes (RegEx) for short, and use Python's \",/*#__PURE__*/ _jsx(\"code\",{children:\"re\"}),\" module to work with regular expressions. RegEx is incredibly useful, and so you must get your head around it early. Regular expressions are the default way of data cleaning and wrangling in Python. Be it extraction of specific parts of text from web pages, making sense of twitter data or preparing your data for text mining \u2013 Regular expressions are your best bet for all these tasks.\"]}),/*#__PURE__*/ _jsx(\"h3\",{children:\"What is a regular expression in Python?\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"You may be familiar with searching for text using shortcut ctrl + F and entering the text you are looking for. Regular expressions go one step further: They allow you to specify a pattern of text to search for. Essentially RegEx as a sequence of characters that defines a search pattern. Knowing regular expressions can mean the difference between solving a problem in 3 steps and solving in 3,000 steps.\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"For example, you may need to find in some text a phone number that you don't know, but if you live in the USA or Canada, you know it will be three digits, followed by a hyphen, then another three digits followed by a hyphen and then four more digits. Humans are good at recognising patterns, so you will know that 415-555-3456 is a phone number, but 6789,78564,67708879 is not.\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Regular expressions are supported by most of the programming languages like Python, Perl, R, Java and many others. In this post, you\u2019ll explore \",/*#__PURE__*/ _jsx(\"strong\",{children:\"regular expressions in Python only\"}),\".\"]}),/*#__PURE__*/ _jsx(\"h3\",{children:\"How do you use regular expressions in Python?\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"If you don't know how to use regexes and you want to find a phone number in a string, you will have to write a relatively complex function, and it will take longer for your code to run, compare to regular expressions. I hope by now, I managed to convince you to learn regex and save yourself a ton of time.\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Regular expressions are descriptions for a pattern of text. For instance, a \",/*#__PURE__*/ _jsx(\"code\",{children:\"\\\\d\"}),\" in a regex stands for a digit character - that is, any single numeral 0 to 9. The regex \",/*#__PURE__*/ _jsx(\"code\",{children:\"\\\\d\\\\d\\\\d-\\\\d\\\\d\\\\d-\\\\d\\\\d\\\\d\\\\d\"}),\" is used by Python to match a string of three numbers, a hyphen, three more numbers, another hyphen, and four numbers. Anything else would not match the \",/*#__PURE__*/ _jsx(\"code\",{children:\"\\\\d\\\\d\\\\d-\\\\d\\\\d\\\\d-\\\\d\\\\d\\\\d\\\\d\"}),\" regex.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:\"{}\"}),\" - \",/*#__PURE__*/ _jsx(\"strong\",{children:\"Braces\"})]}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Regular expression for the same pattern can be also defined as \",/*#__PURE__*/ _jsx(\"code\",{children:\"\\\\d{3}-\\\\d{3}-\\\\d{4}\"}),\". \\xa0 Adding a \",/*#__PURE__*/ _jsx(\"code\",{children:\"3\"}),\" in curly brackets \",/*#__PURE__*/ _jsx(\"code\",{children:\"{3}\"}),' after a pattern is like saying, \"Match this pattern three times.\" So ',/*#__PURE__*/ _jsx(\"code\",{children:\"\\\\d\\\\d\\\\d-\\\\d\\\\d\\\\d-\\\\d\\\\d\\\\d\\\\d\"}),\" and \",/*#__PURE__*/ _jsx(\"code\",{children:\"\\\\d{3}-\\\\d{3}-\\\\d{4}\"}),\" will find the same pattern - phone number format.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Consider this code: \",/*#__PURE__*/ _jsx(\"code\",{children:\"{n,m}\"}),\". This means at least n, and at most m repetitions of the pattern left to it. This RegEx \",/*#__PURE__*/ _jsx(\"code\",{children:\"[0-9]{2, 4}\"}),\" matches at least two digits but not more than four digits.\"]}),/*#__PURE__*/ _jsx(\"h3\",{children:\"Character Classes\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"In the phone number regex example, you learned that \",/*#__PURE__*/ _jsx(\"code\",{children:\"\\\\d\"}),\" could stand for any numeric digit. There are many such shorthand character classes, as shown below.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:\"\\\\d\"}),\" - Matches any decimal digit. Equivalent to any single numeral 0 to 9.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:\"\\\\D\"}),\" - Matches any character that is not a numeric digit from 0 to 9.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:\"\\\\s\"}),' - Matches where a string contains any whitespace character. Equivalent to any space, tab, or newline charecter. (Think of this as matching \"space\" charecters.)']}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:\"\\\\S\"}),\" - Matches any character that is not a space, tab or newline.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:\"\\\\w\"}),\" - Matches any alphanumeric character (digits and alphabets), or the underscore charecter. Equivalent to \",/*#__PURE__*/ _jsx(\"code\",{children:\"[a-zA-Z0-9_]\"}),\".\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:\"\\\\W\"}),\" - Matches any non-alphanumeric character. Any charecter that is not a letter, number, or the underscore charecter.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:\"\\\\Z\"}),\" - Matches if the specified characters are at the end of a string. Expession \",/*#__PURE__*/ _jsx(\"code\",{children:\"Python\\\\Z\"}),' will match text \"I love Python\" but, would not match I like Python Programming.']}),/*#__PURE__*/ _jsx(\"h3\",{children:\"Square brackets - make your own \\xa0charecter classes\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"From time to time, you will want to match a set of characters, but you will find that the shorthand character classes ( \",/*#__PURE__*/ _jsx(\"code\",{children:\"\\\\d\"}),\", \",/*#__PURE__*/ _jsx(\"code\",{children:\"\\\\w\"}),\", \",/*#__PURE__*/ _jsx(\"code\",{children:\"\\\\s\"}),\", and so on) are too broad. In such a case, you can define your character class using square brackets. As an illustration, the character class \",/*#__PURE__*/ _jsx(\"code\",{children:\"[aeiou]\"}),\" will match any lowercase vowel.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\"[]\"})}),/*#__PURE__*/ _jsx(\"strong\",{children:\" - \"}),\"Square brackets specifies a set of characters you wish to match.\"]}),/*#__PURE__*/ _jsx(\"h3\",{children:\"MetaCharacters\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"To define regular expressions, metacharacters are used. For example, \",/*#__PURE__*/ _jsx(\"code\",{children:\"\\\\\"}),\" and \",/*#__PURE__*/ _jsx(\"code\",{children:\"?\"}),\" are metacharacters. Metacharacters are characters that are interpreted in a special way by a RegEx engine. Here's a list of metacharacters: \",/*#__PURE__*/ _jsx(\"strong\",{children:\"[]\"}),\" \",/*#__PURE__*/ _jsx(\"strong\",{children:\".\"}),\" \",/*#__PURE__*/ _jsx(\"strong\",{children:\"^\"}),\" \",/*#__PURE__*/ _jsx(\"strong\",{children:\"$\"}),\" \",/*#__PURE__*/ _jsx(\"strong\",{children:\"*\"}),\" \",/*#__PURE__*/ _jsx(\"strong\",{children:\"+\"}),\" \",/*#__PURE__*/ _jsx(\"strong\",{children:\"?\"}),\" \",/*#__PURE__*/ _jsx(\"strong\",{children:\"{}\"}),\" \",/*#__PURE__*/ _jsx(\"strong\",{children:\"()\"}),\" \",/*#__PURE__*/ _jsx(\"strong\",{children:\"\\\\\"}),\" \",/*#__PURE__*/ _jsx(\"strong\",{children:\"|\"})]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:\".\"}),\" \",/*#__PURE__*/ _jsx(\"em\",{children:\"Period\\\\Dot\"}),\" - A period matches any single character (except newline \",/*#__PURE__*/ _jsx(\"code\",{children:\"'\\\\n'\"}),\").\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:\"^\"}),\" \",/*#__PURE__*/ _jsx(\"em\",{children:\"Caret\"}),\" - The caret symbol \",/*#__PURE__*/ _jsx(\"code\",{children:\"^\"}),\" is used to check if a string \",/*#__PURE__*/ _jsx(\"strong\",{children:\"starts with\"}),\" a certain character.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:\"$\"}),\" \",/*#__PURE__*/ _jsx(\"em\",{children:\"Dollar Symbol\"}),\" - The dollar symbol \",/*#__PURE__*/ _jsx(\"code\",{children:\"$\"}),\" is used to check if a string \",/*#__PURE__*/ _jsx(\"strong\",{children:\"ends with\"}),\" a certain character.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:\"*\"}),\" \",/*#__PURE__*/ _jsx(\"em\",{children:\"Star\"}),\" - The star symbol \",/*#__PURE__*/ _jsx(\"code\",{children:\"*\"}),\" matches \",/*#__PURE__*/ _jsx(\"strong\",{children:\"zero or more occurrences\"}),\" of the pattern left to it.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:\"+\"}),\" \",/*#__PURE__*/ _jsx(\"em\",{children:\"Plus \"}),\"- The plus symbol \",/*#__PURE__*/ _jsx(\"code\",{children:\"+\"}),\" matches \",/*#__PURE__*/ _jsx(\"strong\",{children:\"one or more occurrences\"}),\" of the pattern left to it.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:\"?\"}),\" \",/*#__PURE__*/ _jsx(\"em\",{children:\"Question mark\"}),\" -The question mark symbol \",/*#__PURE__*/ _jsx(\"code\",{children:\"?\"}),\" matches \",/*#__PURE__*/ _jsx(\"strong\",{children:\"zero or one occurrence\"}),\" of the pattern left to it.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:\"|\"}),\" \",/*#__PURE__*/ _jsx(\"em\",{children:\"Vertical bar \"}),\"- Vertical bar \",/*#__PURE__*/ _jsx(\"code\",{children:\"|\"}),\" is used for alternation (\",/*#__PURE__*/ _jsx(\"code\",{children:\"or\"}),\" operator).\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:\"()\"}),\" \",/*#__PURE__*/ _jsx(\"em\",{children:\"Parentheses\"}),\" - Parentheses \",/*#__PURE__*/ _jsx(\"code\",{children:\"()\"}),\" is used \",/*#__PURE__*/ _jsx(\"strong\",{children:\"to group sub-patterns\"}),\". \\xa0 \\xa0 \\xa0 \\xa0 \\xa0 \\xa0 \\xa0 \\xa0 \\xa0 \\xa0 \\xa0 \\xa0For example, \",/*#__PURE__*/ _jsx(\"code\",{children:\"(a|b|c)xz\"}),\" match any string that matches either a or b or c followed by xz.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:\"\\\\\"}),\" \",/*#__PURE__*/ _jsx(\"em\",{children:\"Backlash - \"}),/*#__PURE__*/ _jsx(\"code\",{children:\"\\\\\"}),\" backlash is used to escape various characters including all metacharacters. For example, \",/*#__PURE__*/ _jsx(\"code\",{children:\"\\\\$a\"}),\" match if a string contains \",/*#__PURE__*/ _jsx(\"code\",{children:\"$\"}),\" followed by \",/*#__PURE__*/ _jsx(\"code\",{children:\"a\"}),\". Here, \",/*#__PURE__*/ _jsx(\"code\",{children:\"$\"}),\" is not specially interpreted by a RegEx engine. If you are unsure if a character has special meaning or not, you can put \",/*#__PURE__*/ _jsx(\"code\",{children:\"\\\\\"}),\" in front of it. This makes sure the character is not treated specially.\"]}),/*#__PURE__*/ _jsx(\"h3\",{children:\"How to escape MetaCharacters in Regex using Python\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"If you need to define a simple pattern like we did with the phone number exsample \",/*#__PURE__*/ _jsx(\"code\",{children:\"\\\\d\\\\d\\\\d-\\\\d\\\\d\\\\d-\\\\d\\\\d\\\\d\\\\d\"}),\" then you don't need to worry about metacharacters if you use \",/*#__PURE__*/ _jsx(\"code\",{children:\"r\"}),\" in \",/*#__PURE__*/ _jsx(\"code\",{children:\"re.compile()\"}),\" function. Remember that \",/*#__PURE__*/ _jsx(\"code\",{children:\"-\"}),\" \\xa0the underscore charecter is considered \\xa0an \\xa0alphanumeric character (digits and alphabets) by Regex.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"However, if you need to define a slightly more complex pattern where a pattern includes one or multiple metacharacters then you need to know how to escape such characters in Python. This can be done by using the backslash \",/*#__PURE__*/ _jsx(\"code\",{children:\"\\\\\"}),\". The string value \",/*#__PURE__*/ _jsx(\"code\",{children:\"\\\\n\"}),\" represents a single newline charecter, not a backslash followed by a lowercase n. You need to enter the escape character \",/*#__PURE__*/ _jsx(\"code\",{children:\"\\\\\\\\\"}),\" to print a single backlash. So \",/*#__PURE__*/ _jsx(\"code\",{children:\"\\\\\\\\n\"}),\" is the string that represents a backslash followed by a lowercase n.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Alternatively, you can use \",/*#__PURE__*/ _jsx(\"code\",{children:\"r\"}),\" to mark your string as a raw string, which does not escape charecters, by putting it before the first quote of the string value. Since Regex \\xa0frequently use backlashes and other metacharecters in them, it is convinient to pass raw strings to the \",/*#__PURE__*/ _jsx(\"code\",{children:\"re.compile()\"}),\" function instead of typing extra backslashes. Entering \",/*#__PURE__*/ _jsx(\"code\",{children:\"r'\\\\d\\\\d\\\\d-\\\\d\\\\d\\\\d-\\\\d\\\\d\\\\d\\\\d\"}),\" is easier than typing \",/*#__PURE__*/ _jsx(\"code\",{children:\"r'\\\\\\\\d\\\\\\\\d\\\\\\\\d-\\\\\\\\d\\\\\\\\d\\\\\\\\d-\\\\\\\\d\\\\\\\\d\\\\\\\\d\\\\\\\\d\"}),\".\"]}),/*#__PURE__*/ _jsxs(\"h3\",{children:[\"Python RegEx - module \",/*#__PURE__*/ _jsx(\"code\",{children:\"re\"})]}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Python has a module named \",/*#__PURE__*/ _jsx(\"code\",{children:\"re\"}),\" to work with regular expressions. You can find all the regex functions in Python in the \",/*#__PURE__*/ _jsx(\"code\",{children:\"re\"}),\" module. To use it, we need to import the module:\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"import re\"})}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Passing a string value representing your Regex to \",/*#__PURE__*/ _jsx(\"code\",{children:\"re.compile()\"}),\" returns a Regex object .\"]}),/*#__PURE__*/ _jsx(\"p\",{children:\"The most common uses of regular expressions are:\"}),/*#__PURE__*/ _jsxs(\"ul\",{style:{\"--framer-font-size\":\"22px\",\"--framer-text-alignment\":\"start\",\"--framer-text-color\":\"rgb(60, 72, 78)\",\"--framer-text-transform\":\"none\"},children:[/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:\"Search a string (search and match)\"})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:\"Finding a string (findall)\"})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:\"Break string into a sub strings (split)\"})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:\"Replace part of a string (sub)\"})})]}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Let\u2019s look at the methods that library \u201C\",/*#__PURE__*/ _jsx(\"strong\",{children:\"re\"}),\"\u201D provides to perform these tasks.\"]}),/*#__PURE__*/ _jsxs(\"ol\",{style:{\"--framer-font-size\":\"22px\",\"--framer-text-alignment\":\"start\",\"--framer-text-color\":\"rgb(60, 72, 78)\",\"--framer-text-transform\":\"none\"},children:[/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"em\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\"re.compile ()\"})}),/*#__PURE__*/ _jsx(\"strong\",{children:\" - \\xa0\"}),/*#__PURE__*/ _jsxs(\"code\",{children:[\"re.compile(<regex>, \",/*#__PURE__*/ _jsx(\"em\",{children:\"flags=0\"}),\")\"]}),\" Compile a regular expression pattern into a regular expression object, which can be used for matching using its \",/*#__PURE__*/ _jsx(\"code\",{children:\"match()\"}),\", \",/*#__PURE__*/ _jsx(\"code\",{children:\"search()\"}),\" and other methods, described below. The expression\u2019s behaviour can be modified by specifying a \",/*#__PURE__*/ _jsx(\"em\",{children:\"flags\"}),\" value. Values can be any of the following variables, combined using bitwise OR (the \",/*#__PURE__*/ _jsx(\"code\",{children:\"|\"}),\" operator).\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"em\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\"re.match() - \"})}),/*#__PURE__*/ _jsxs(\"code\",{children:[\"re.match(<regex>, <\",/*#__PURE__*/ _jsx(\"em\",{children:\"string>\"}),\", \",/*#__PURE__*/ _jsx(\"em\",{children:\"flags=0\"}),\")\"]}),\" If zero or more characters at the beginning of \",/*#__PURE__*/ _jsx(\"em\",{children:\"string\"}),\" match the regular expression \",/*#__PURE__*/ _jsx(\"em\",{children:\"pattern\"}),\", return a corresponding match object. It will return \",/*#__PURE__*/ _jsx(\"code\",{children:\"None\"}),\" if the string does not match the pattern.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"em\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\"re.search()\"})}),\" \\xa0- \",/*#__PURE__*/ _jsx(\"code\",{children:\"re.search(<regex>, <string>)\"}),\" \\xa0scans provided string value looking for the first location where the pattern Regex matches. If a match is found, then re.search() returns a match object. Otherwise, it returns \",/*#__PURE__*/ _jsx(\"code\",{children:/*#__PURE__*/ _jsx(Link,{href:\"https://realpython.com/null-in-python/\",openInNewTab:false,smoothScroll:false,children:/*#__PURE__*/ _jsx(\"a\",{children:\"None\"})})}),\".\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"em\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\"re.findall() - \"})}),/*#__PURE__*/ _jsxs(\"code\",{children:[\"re.findall(<regex>, <string>, \",/*#__PURE__*/ _jsx(\"em\",{children:\"flags=0\"}),\")\"]}),/*#__PURE__*/ _jsx(\"em\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\" \"})}),\"method returns a list of strings containing all matches.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"em\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\"re.split() - \"})}),/*#__PURE__*/ _jsxs(\"code\",{children:[\"re.split(<regex>, <string>, \",/*#__PURE__*/ _jsx(\"em\",{children:\"maxsplit=0\"}),\", \",/*#__PURE__*/ _jsx(\"em\",{children:\"flags=0\"}),\")\"]}),\" Split \",/*#__PURE__*/ _jsx(\"em\",{children:\"string\"}),\" by the occurrences of \",/*#__PURE__*/ _jsx(\"em\",{children:\"pattern\"}),\". If capturing parentheses are used in \",/*#__PURE__*/ _jsx(\"em\",{children:\"pattern\"}),\", then the text of all groups in the pattern are also returned as part of the resulting list. If \",/*#__PURE__*/ _jsx(\"em\",{children:\"maxsplit\"}),\" is nonzero, at most \",/*#__PURE__*/ _jsx(\"em\",{children:\"maxsplit\"}),\" splits occur, and the remainder of the string is returned as the final element of the list.\",/*#__PURE__*/ _jsx(\"em\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\" \"})}),\"The \",/*#__PURE__*/ _jsx(\"code\",{children:\"re.split\"}),\" method splits the string where there is a match and returns a list of strings where the splits have occurred.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"em\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\"re.sub() - \"})}),/*#__PURE__*/ _jsx(\"code\",{children:\"re.sub(<regex>, <replace>, <string>, count=0, flags=0)\"}),\" The method returns a string where matched occurrences are replaced with the content of replace variable.\"]})})]}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"In this article, I did not cover all or functions, constants, and an exception that module \",/*#__PURE__*/ _jsx(\"code\",{children:\"re\"}),\" provides, but I will provide detailed walkthrough tutorials later in the Regex series of tutorials. If you want to learn more about \",/*#__PURE__*/ _jsx(\"strong\",{children:\"module re\"}),\" check out its \",/*#__PURE__*/ _jsx(Link,{href:\"https://docs.python.org/3/library/re.html\",openInNewTab:false,smoothScroll:false,children:/*#__PURE__*/ _jsx(\"a\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\"documentation\"})})}),\".\"]})]}),qmKEIZQOx:\"rgb(0, 153, 255)\",V8PWfbvT8:\"python-regular-expressions\",vny2uxJff:{alt:\"\",src:new URL(\"assets/tRWxiz8bNQ75FDvPYBFJ7Kw3Kco.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,srcSet:`${new URL(\"assets/512/tRWxiz8bNQ75FDvPYBFJ7Kw3Kco.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 512w, ${new URL(\"assets/1024/tRWxiz8bNQ75FDvPYBFJ7Kw3Kco.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 1024w, ${new URL(\"assets/tRWxiz8bNQ75FDvPYBFJ7Kw3Kco.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 2000w`},ZckEhR3V3:\"Python regular expressions (RegEx) simple yet complete guide for beginners\"},{Djh5_J2Mt:\"Guides\",id:\"FfYdO65Hu\",iP8mvmvMM:\"2020-05-31T00:00:00.000Z\",KbGlbG3Yd:/*#__PURE__*/ _jsxs(React.Fragment,{children:[/*#__PURE__*/ _jsxs(\"p\",{children:[\"Before you start any data project, you need to take a step back and look at the dataset before doing anything with it. Exploratory Data Analysis (EDA) is just as important as any part of data analysis because real datasets are really messy, and lots of things can go wrong if you don't know your data. The Pandas library is equipped with several handy functions for this very purpose, and \",/*#__PURE__*/ _jsx(\"code\",{children:\"value_counts\"}),\" is one of them. Pandas \",/*#__PURE__*/ _jsx(\"code\",{children:\"value_counts\"}),\" returns an object containing \",/*#__PURE__*/ _jsx(\"strong\",{children:\"counts of unique values \"}),\"in a pandas dataframe in sorted order. However, most users tend to overlook that this function can be used not only with the default parameters. So in this article, I\u2019ll show you how to get more value from the Pandas \",/*#__PURE__*/ _jsx(\"code\",{children:\"value_counts\"}),\" by altering the default parameters and a few additional tricks that will save you time.\"]}),/*#__PURE__*/ _jsx(\"h1\",{children:\"What is value_counts() function?\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"The \",/*#__PURE__*/ _jsx(\"code\",{children:\"value_counts()\"}),\" function is used to get a \",/*#__PURE__*/ _jsx(\"strong\",{children:\"Series \"}),\"containing counts of unique values. The resulting object will be in descending order so that the first element is the most frequently-occurring element. Excludes NA values by default.\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\"Syntax\"})}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:\"df['your_column'].value_counts()\"}),\" - this will return the count of unique occurences in the specified column.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"It is important to note that \",/*#__PURE__*/ _jsx(\"code\",{children:\"value_counts\"}),\" only works on pandas series, not Pandas dataframes. As a result, we only include one bracket df['your_column'] and not two brackets df[['your_column']].\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\"Parameters\"})}),/*#__PURE__*/ _jsxs(\"ul\",{style:{\"--framer-font-size\":\"22px\",\"--framer-text-alignment\":\"start\",\"--framer-text-color\":\"rgb(60, 72, 78)\",\"--framer-text-transform\":\"none\"},children:[/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"normalize (\"}),\"bool, default False) - If True then the object returned will contain the relative frequencies of the unique values.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"sort (\"}),\"bool, default True) - Sort by frequencies.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"ascending (\"}),\"bool, default False) - Sort in ascending order.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"bins\"}),\" (int, optional) - Rather than count values, group them into half-open bins, a convenience for \",/*#__PURE__*/ _jsx(\"code\",{children:\"pd.cut\"}),\", only works with numeric data.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"dropna (\"}),\"bool, default True) -Don\u2019t include counts of NaN.\"]})})]}),/*#__PURE__*/ _jsx(\"h1\",{children:\"Loading a dataset for live demo\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Let\u2019s see the basic usage of this method using a dataset. I\u2019ll be using the\",/*#__PURE__*/ _jsx(Link,{href:\"https://www.kaggle.com/siddharthm1698/coursera-course-dataset/kernels\",openInNewTab:false,smoothScroll:false,children:/*#__PURE__*/ _jsx(\"a\",{children:\" Coursera Course Dataset from Kaggle\"})}),\" for the live demo. I have also published an accompanying notebook on git, in case you want to get my code.\"]}),/*#__PURE__*/ _jsx(\"p\",{children:\"Let\u2019s start by importing the required libraries and the dataset. This is a fundamental step in every data analysis process. And then review the dataset in Jupyter notebooks.\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"# import package import pandas as pd # Loading the dataset df = pd.read_csv('coursea_data.csv') #quick look about the information of the csv df.head(10)\"})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,rFvEPhVK7Xzvq0PjZe8qutnxWbU.png\",\"data-framer-height\":\"1054\",\"data-framer-width\":\"2008\",height:\"527\",src:new URL(\"assets/rFvEPhVK7Xzvq0PjZe8qutnxWbU.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"2008 / 1054\"},width:\"1004\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Loading the dataset\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"# check how many records are in the dataset # and if we have any NA df.info()\"})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,ykN3aaE5U1G3jXvCR6DwgaJXU4Q.png\",\"data-framer-height\":\"518\",\"data-framer-width\":\"1988\",height:\"259\",src:new URL(\"assets/ykN3aaE5U1G3jXvCR6DwgaJXU4Q.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1988 / 518\"},width:\"994\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"This tells us that we have 891 records in our dataset and that we don't have any NA values.\"}),/*#__PURE__*/ _jsx(\"h1\",{children:\"1. ) value_counts() with default parameters\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Now we are ready to use \",/*#__PURE__*/ _jsx(\"code\",{children:\"value_counts\"}),\" function. Let begin with the basic application of the function.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Syntax \"}),\"- \",/*#__PURE__*/ _jsx(\"code\",{children:\"df['your_column'].value_counts()\"})]}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"We will get counts for the column \",/*#__PURE__*/ _jsx(\"em\",{children:\"course_difficulty \"}),\"from our dataframe.\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"# count of all unique values for the column course_difficulty df['course_difficulty'].value_counts()\"})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,P4nSTiK9kDiFirlFRLgn7YsTDM.png\",\"data-framer-height\":\"264\",\"data-framer-width\":\"1992\",height:\"132\",src:new URL(\"assets/P4nSTiK9kDiFirlFRLgn7YsTDM.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1992 / 264\"},width:\"996\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"basic use of value_counts function\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"The \",/*#__PURE__*/ _jsx(\"code\",{children:\"value_counts\"}),\" function returns the count of all unique values in the given index in descending order without any null values. We can quickly see that the maximum courses have \",/*#__PURE__*/ _jsx(\"strong\",{children:\"Beginner\"}),\" difficulty, followed by \",/*#__PURE__*/ _jsx(\"strong\",{children:\"Intermediate\"}),\" and \",/*#__PURE__*/ _jsx(\"strong\",{children:\"Mixed\"}),\", and then \",/*#__PURE__*/ _jsx(\"strong\",{children:\"Advanced\"}),\".\"]}),/*#__PURE__*/ _jsx(\"p\",{children:\"Now that we understand the basic use of the function, it is time to figure out what parameters do.\"}),/*#__PURE__*/ _jsx(\"h1\",{children:\"2.) value_counts() in ascending order\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"The series returned by \",/*#__PURE__*/ _jsx(\"code\",{children:\"value_counts()\"}),\" is in descending order by default. We can reverse the case by setting the \",/*#__PURE__*/ _jsx(\"code\",{children:\"ascending\"}),\" parameter to \",/*#__PURE__*/ _jsx(\"code\",{children:\"True\"}),\".\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Syntax \"}),\"- \",/*#__PURE__*/ _jsx(\"code\",{children:\"df['your_column'].value_counts(ascending=True)\"})]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"# count of all unique values for the column course_difficulty # in ascending order df['course_difficulty'].value_counts(ascending=True)\"})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,ccnKyOqYqDHMhM4kWEib1qV8RI.png\",\"data-framer-height\":\"276\",\"data-framer-width\":\"1984\",height:\"138\",src:new URL(\"assets/ccnKyOqYqDHMhM4kWEib1qV8RI.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1984 / 276\"},width:\"992\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"value_counts in ascending order\"}),/*#__PURE__*/ _jsx(\"h1\",{children:\"3.) value_counts() sorted alphabetically\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"In some cases it is necessary to display your value_counts in an alphabetical order. This can be done easily by adding sort index \",/*#__PURE__*/ _jsx(\"code\",{children:\"sort_index(ascending=True)\"}),\" after your value_counts().\"]}),/*#__PURE__*/ _jsx(\"p\",{children:'Default value_counts() for column \"course_difficulty\" sorts values by counts:'}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,eRdLz6H6V1Xvii9aSrHUwtnEw.png\",\"data-framer-height\":\"133\",\"data-framer-width\":\"347\",height:\"66\",src:new URL(\"assets/eRdLz6H6V1Xvii9aSrHUwtnEw.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"347 / 133\"},width:\"173\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"normal value_counts()\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Value_counts() with sort_index(ascending=True) sorts by index (column that you are running value_counts() on:\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,gOJlArjma87TKvUKE0bTkKqdJpQ.png\",\"data-framer-height\":\"134\",\"data-framer-width\":\"566\",height:\"67\",src:new URL(\"assets/gOJlArjma87TKvUKE0bTkKqdJpQ.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"566 / 134\"},width:\"283\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Value_counts() sorted alphabetically\\xa0\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"If you want to list value_counts() in reverse alphabetical order you will need to change ascending to False \",/*#__PURE__*/ _jsx(\"code\",{children:\"sort_index(ascending=False)\"})]}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,n9JylXa9DgolUnMboMfxcPRqzw.png\",\"data-framer-height\":\"130\",\"data-framer-width\":\"572\",height:\"65\",src:new URL(\"assets/n9JylXa9DgolUnMboMfxcPRqzw.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"572 / 130\"},width:\"286\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Value_counts() ordered in reverse alphabetical order\"}),/*#__PURE__*/ _jsx(\"h1\",{children:\"4.) Pandas value_counts(): sort by value, then alphabetically\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Lets use for this example a slightly diffrent dataframe.\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df_fruit = pd.DataFrame({ 'fruit': ['sharon fruit']*5 + ['apples']*5 + ['bananas']*3 + ['nectarines']*3 + ['carrots']*3 + ['apricots'] + ['mango']*2 })\"})}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Here we want to get output sorted first by the value counts, then alphabetically by the name of the fruit. This can be done by combining value_counts() with \",/*#__PURE__*/ _jsx(\"code\",{children:\"sort_index(ascending=False)\"}),\" and \",/*#__PURE__*/ _jsx(\"code\",{children:\"sort_values(ascending=False)\"}),\".\"]}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,5d94LvU9uAxsdb6EaxoWDzuD0KU.png\",\"data-framer-height\":\"184\",\"data-framer-width\":\"775\",height:\"92\",src:new URL(\"assets/5d94LvU9uAxsdb6EaxoWDzuD0KU.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"775 / 184\"},width:\"387\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Value_counts() sorted by value then alphabetically\\xa0\"}),/*#__PURE__*/ _jsx(\"h1\",{children:\"5.) value_counts() persentage counts or relative frequencies of the unique values\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Sometimes, getting a percentage count is better than the normal count. By setting \",/*#__PURE__*/ _jsx(\"code\",{children:\"normalize=True\"}),\", the object returned will contain the relative frequencies of the unique values. The \",/*#__PURE__*/ _jsx(\"code\",{children:\"normalize\"}),\" parameter is set to \",/*#__PURE__*/ _jsx(\"code\",{children:\"False\"}),\" by default.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Syntax \"}),\"- \",/*#__PURE__*/ _jsx(\"code\",{children:\"df['your_column'].value_counts(normalize=True)\"})]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"# value_counts percentage view df['course_difficulty'].value_counts(normalize=True)\"})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,F949j6EDoHimlSZyT9oeM9fRxdc.png\",\"data-framer-height\":\"272\",\"data-framer-width\":\"1984\",height:\"136\",src:new URL(\"assets/F949j6EDoHimlSZyT9oeM9fRxdc.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1984 / 272\"},width:\"992\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"value_counts as percentages\"}),/*#__PURE__*/ _jsx(\"h1\",{children:\"6.) value_counts() to bin continuous data into discrete intervals\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"This is one great hack that is commonly under-utilised. The\",/*#__PURE__*/ _jsx(\"code\",{children:\" value_counts()\"}),\" can be used to bin continuous data into discrete intervals with the help of the \",/*#__PURE__*/ _jsx(\"code\",{children:\"bin\"}),\" parameter. This option works only with numerical data. It is similar to the \",/*#__PURE__*/ _jsx(\"code\",{children:\"pd.cut\"}),\" function. Let\u2019s see how it works using the \",/*#__PURE__*/ _jsx(\"em\",{children:\"course_rating\"}),\" column. Let\u2019s group the counts for the column into 4 bins.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Syntax \"}),\"- \",/*#__PURE__*/ _jsx(\"code\",{children:\"df['your_column'].value_counts(bin = number of bins)\"})]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"# applying value_counts with default parameters df['course_rating'].value_counts() # applying value_counts on a numerical column # with the bin parameter df['course_rating'].value_counts(bins=4)\"})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,EZAF36fEr7w8OKXvJgPi1d2pLsU.png\",\"data-framer-height\":\"610\",\"data-framer-width\":\"1990\",height:\"305\",src:new URL(\"assets/EZAF36fEr7w8OKXvJgPi1d2pLsU.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1990 / 610\"},width:\"995\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"valse_counts default parameters\\xa0\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,yL31gdNbiMkiJ14jBSthKqzlsM.png\",\"data-framer-height\":\"274\",\"data-framer-width\":\"1980\",height:\"137\",src:new URL(\"assets/yL31gdNbiMkiJ14jBSthKqzlsM.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1980 / 274\"},width:\"990\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"value_counts binned\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Binning makes it easy to understand the idea being conveyed. We can easily see that most of the people out of the total population rated courses above 4.5. With just a few outliers where the rating is below 4.15 (only 7 rated courses lower than 4.15).\"}),/*#__PURE__*/ _jsx(\"h1\",{children:\"7.) value_counts() displaying the NaN values\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"By default, the count of null values is excluded from the result. But, the same can be displayed easily by setting the \",/*#__PURE__*/ _jsx(\"code\",{children:\"dropna\"}),\" parameter to \",/*#__PURE__*/ _jsx(\"code\",{children:\"False\"}),\". Since our dataset does not have any null values setting dropna parameter would not make a difference. But this can be of use on another dataset that has null values, so keep this in mind.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Syntax\"}),\" - \",/*#__PURE__*/ _jsx(\"code\",{children:\"df['your_column'].value_counts(dropna=False)\"})]}),/*#__PURE__*/ _jsx(\"h1\",{children:\"8.) value_counts() as dataframe\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"As mentioned at the beginning of the article, value_counts returns series, not a dataframe. If you want to have your counts as a dataframe you can do it using function \",/*#__PURE__*/ _jsx(\"code\",{children:\".to_frame()\"}),\" after the \",/*#__PURE__*/ _jsx(\"code\",{children:\".value_counts()\"}),\".\"]}),/*#__PURE__*/ _jsx(\"p\",{children:\"We can convert the series to a dataframe as follows:\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Syntax \"}),\"- \",/*#__PURE__*/ _jsx(\"code\",{children:\"df['your_column'].value_counts().to_frame()\"})]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"# applying value_counts with default parameters df['course_difficulty'].value_counts() # value_counts as dataframe df['course_difficulty'].value_counts().to_frame()\"})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,bOATgpzw4ilOrWQEPYVX5JauH4.png\",\"data-framer-height\":\"654\",\"data-framer-width\":\"1988\",height:\"327\",src:new URL(\"assets/bOATgpzw4ilOrWQEPYVX5JauH4.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1988 / 654\"},width:\"994\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"normal value_counts & value_counts as df\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"If you need to name index column and rename a column, with counts in the dataframe you can convert to dataframe in a slightly different way.\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"value_counts = df['course_difficulty'].value_counts() # converting to df and assigning new names to the columns df_value_counts = pd.DataFrame(value_counts) df_value_counts = df_value_counts.reset_index() df_value_counts.columns = ['unique_values', 'counts for course_difficulty'] # change column names df_value_counts\"})}),/*#__PURE__*/ _jsx(\"h1\",{children:\"9.) Group by and value_counts\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"This is one of my favourite uses of the value_counts() function and an underutilized one too. \",/*#__PURE__*/ _jsx(\"code\",{children:\"Groupby\"}),\" is a very powerful pandas method. You can group by one column and count the values of another column per this column value using \",/*#__PURE__*/ _jsx(\"code\",{children:\"value_counts\"}),\".\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Syntax\"}),\" - \",/*#__PURE__*/ _jsx(\"code\",{children:\"df.groupby('your_column_1')['your_column_2'].value_counts()\"})]}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Using \",/*#__PURE__*/ _jsx(\"code\",{children:\"groupby\"}),\" and \",/*#__PURE__*/ _jsx(\"code\",{children:\"value_counts\"}),\" we can count the number of certificate types for each type of course difficulty.\"]}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,3a6WBG62Lm6RQVs5vTe9Y4QYIc.png\",\"data-framer-height\":\"464\",\"data-framer-width\":\"1984\",height:\"232\",src:new URL(\"assets/3a6WBG62Lm6RQVs5vTe9Y4QYIc.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1984 / 464\"},width:\"992\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Group by course difficulty and value counts for course certificate type\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"This is a multi-index, a valuable trick in pandas dataframe which allows us to have a few levels of index hierarchy in our dataframe. In this case, the course difficulty is the level 0 of the index and the certificate type is on level 1.\"}),/*#__PURE__*/ _jsx(\"h1\",{children:\"10. Pandas Value Counts With a Constraint\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"When working with a dataset, you may need to return the number of occurrences by your index column using \",/*#__PURE__*/ _jsx(\"code\",{children:\"value_counts()\"}),\" that are also limited by a constraint.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Syntax\"}),\" - \",/*#__PURE__*/ _jsx(\"code\",{children:\"df['your_column'].value_counts().loc[lambda x : x>1]\"})]}),/*#__PURE__*/ _jsx(\"p\",{children:\"The above quick one-liner will filter out counts for unique data and see only data where the value in the specified column is greater than 1.\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Let's demonstrate this by limiting course rating to be greater than 4.\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"# prints standart value_counts for the column df['course_rating'].value_counts() # prints filtered value_counts for the column df['course_rating'].value_counts().loc[lambda x : x>4]\"})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,WEuPUGurmnhcvbEUrdAxDwBH3KM.png\",\"data-framer-height\":\"1038\",\"data-framer-width\":\"1988\",height:\"519\",src:new URL(\"assets/WEuPUGurmnhcvbEUrdAxDwBH3KM.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1988 / 1038\"},width:\"994\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"value_counts with a constraint\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Hence, we can see that value counts is a handy tool, and we can do some interesting analysis with this single line of code.\"})]}),qmKEIZQOx:\"rgb(0, 153, 255)\",V8PWfbvT8:\"pandas-value-counts\",vny2uxJff:{alt:\"\",src:new URL(\"assets/WJjI9yNCk5yHyPS8eTi6X5yiU4.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,srcSet:`${new URL(\"assets/512/WJjI9yNCk5yHyPS8eTi6X5yiU4.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 512w, ${new URL(\"assets/1024/WJjI9yNCk5yHyPS8eTi6X5yiU4.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 1024w, ${new URL(\"assets/WJjI9yNCk5yHyPS8eTi6X5yiU4.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 2000w`},ZckEhR3V3:\"8 Python Pandas Value_counts() tricks that make your work more efficient\"},{Djh5_J2Mt:\"Guides\",id:\"r89UoyMDp\",iP8mvmvMM:\"2020-05-05T00:00:00.000Z\",KbGlbG3Yd:/*#__PURE__*/ _jsxs(React.Fragment,{children:[/*#__PURE__*/ _jsx(\"h2\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\"In this article, you\u2019ll learn:\"})}),/*#__PURE__*/ _jsxs(\"ul\",{style:{\"--framer-font-size\":\"22px\",\"--framer-text-alignment\":\"start\",\"--framer-text-color\":\"rgb(60, 72, 78)\",\"--framer-text-transform\":\"none\"},children:[/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:\"What is Correlation\"})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[\"What Pearson, Spearman, and Kendall \",/*#__PURE__*/ _jsx(\"strong\",{children:\"correlation coefficients\"}),\" are\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[\"How to use Pandas \",/*#__PURE__*/ _jsx(\"strong\",{children:\"correlation functions\"})]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[\"How to \",/*#__PURE__*/ _jsx(\"strong\",{children:\"visualize\"}),\" data, regression lines, and correlation matrices with Matplotlib and Seaborn\"]})})]}),/*#__PURE__*/ _jsx(\"h2\",{children:\"Correlation\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Correlation is a statistical technique that can show whether and how strongly pairs of variables are related/interdependent. When we look at two variables over time if one variable changes how does this affect change in another variable.\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"em\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\"Correlation measures to what extend different variables are interdependent.\"})})}),/*#__PURE__*/ _jsx(\"p\",{children:\"For example, lung cancer and smoking are related; smokers tend to develop lung cancer more than non-smokers. The relationship isn't perfect. You can easily think of two people you know who smoke but don't have lung cancer. Nonetheless, the average cancer development in smokers is higher than in non-smokers. Correlation can tell you just how much of the variation in chances of getting cancer is related to their cigarette consumption.\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Although this correlation is fairly obvious, your data may contain unsuspected correlations. You may also suspect there are correlations but don't know which are the strongest. Intelligent correlation analysis can lead to a greater understanding of your data.\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"The long and short of correlation is the following: Correlation is a number between \u20131.0 and +1.0. A correlation could be positive, meaning both variables move in the same direction, or negative, meaning that when one variable\u2019s value increases, the other variables values decrease. Correlation can also be neural or zero, meaning that the variables are unrelated.\"}),/*#__PURE__*/ _jsxs(\"ul\",{style:{\"--framer-font-size\":\"22px\",\"--framer-text-alignment\":\"start\",\"--framer-text-color\":\"rgb(60, 72, 78)\",\"--framer-text-transform\":\"none\"},children:[/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Positive Correlation\"}),\": both variables change in the same direction.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Neutral Correlation\"}),\": No relationship in the change of the variables.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Negative Correlation\"}),\": variables change in opposite directions.\"]})})]}),/*#__PURE__*/ _jsx(\"p\",{children:\"It is important to note that correlation doesn't imply causation. Correlation quantifies the strength of the relationship between the features of a dataset. In some cases, the association is caused by a factor common to several features of interest. (For example, umbrellas are used during the rain, but they don't cause rain).\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"There are several statistics that you can use to quantify correlation. In this article, you\u2019ll learn about three correlation coefficients:\"}),/*#__PURE__*/ _jsxs(\"ul\",{style:{\"--framer-font-size\":\"22px\",\"--framer-text-alignment\":\"start\",\"--framer-text-color\":\"rgb(60, 72, 78)\",\"--framer-text-transform\":\"none\"},children:[/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:\"Pearson\u2019s r\"})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:\"Spearman\u2019s \u03C1 (rho)\"})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:\"Kendall\u2019s \u03C4 (tau)\"})})]}),/*#__PURE__*/ _jsx(\"p\",{children:\"Pearson\u2019s coefficient measures linear correlation, while the Spearman and Kendall coefficients compare the ranks of data.\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Correlation can be useful in data analysis and modelling to better understand the relationships between variables. So it is important that you have a good understanding of it before you attempt a data analysis or modelling.\"}),/*#__PURE__*/ _jsx(\"h2\",{children:\"Pearson, Spearman, and Kendall correlation coefficients\"}),/*#__PURE__*/ _jsxs(\"h3\",{children:[\"- Pearson correlation - \",/*#__PURE__*/ _jsx(\"strong\",{children:\"Linear correlation\"})]}),/*#__PURE__*/ _jsx(\"p\",{children:\"One way to measoure the strenth of corelation between continuose numerical variables is to use Pearson correlation. Pearson correlation method will give you two values:\"}),/*#__PURE__*/ _jsxs(\"ul\",{style:{\"--framer-font-size\":\"22px\",\"--framer-text-alignment\":\"start\",\"--framer-text-color\":\"rgb(60, 72, 78)\",\"--framer-text-transform\":\"none\"},children:[/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:\"correlation coefficient\"})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:\"p-value\"})})]}),/*#__PURE__*/ _jsx(\"p\",{children:\"The Pearson correlation coefficient (named for Karl Pearson) can be used to summarize the strength of the linear relationship between two data samples.\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Several conditions have to be met for Pearson correlation:\"}),/*#__PURE__*/ _jsxs(\"ul\",{style:{\"--framer-font-size\":\"22px\",\"--framer-text-alignment\":\"start\",\"--framer-text-color\":\"rgb(60, 72, 78)\",\"--framer-text-transform\":\"none\"},children:[/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:\"The variables x and y must have a linear relationship.\"})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:\"Both variables x and y must be numerical (or quantitative). That is, they must represent measurements with no restriction on their level of precision. For example, numbers with many places after the decimal point (such as 11.332 or 0.229) must be possible.\"})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:\"The y values must have a normal distribution for each x, with the same variance at each x.\"})})]}),/*#__PURE__*/ _jsx(\"p\",{children:\"The Pearson\u2019s correlation coefficient is calculated as the covariance of the two variables divided by the product of the standard deviation of each data sample. It is the normalization of the covariance between the two variables to give an interpretable score.\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Correlation coefficient and p-value will tell you the following:\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Correlation coefficient\"}),/*#__PURE__*/ _jsxs(\"ul\",{style:{\"--framer-font-size\":\"22px\",\"--framer-text-alignment\":\"start\",\"--framer-text-color\":\"rgb(60, 72, 78)\",\"--framer-text-transform\":\"none\"},children:[/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:\"close to +1: Large Positive relationship\"})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:\"close to -1: Large Negative relationship\"})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:\"close to 0: No relationship\"})})]}),/*#__PURE__*/ _jsx(\"p\",{children:\"P-value\"}),/*#__PURE__*/ _jsxs(\"ul\",{style:{\"--framer-font-size\":\"22px\",\"--framer-text-alignment\":\"start\",\"--framer-text-color\":\"rgb(60, 72, 78)\",\"--framer-text-transform\":\"none\"},children:[/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[\"P-value <0.001: \",/*#__PURE__*/ _jsx(\"strong\",{children:\"Strong\"}),\" certainty in the result\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[\"P-value <0.05: \\xa0\",/*#__PURE__*/ _jsx(\"strong\",{children:\"Moderate\"}),\" certainty in the result\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[\"P-value <0.1: \",/*#__PURE__*/ _jsx(\"strong\",{children:\"Weak\"}),\" certainty in the result\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[\"P-value > 0.1: \",/*#__PURE__*/ _jsx(\"strong\",{children:\"No\"}),\" certainty in the result\"]})})]}),/*#__PURE__*/ _jsx(\"p\",{children:\"The Pearson\u2019s correlation coefficient can be used to evaluate the relationship between more than two variables.\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"This can be done by calculating a matrix of the relationships between each pair of variables in the dataset. The result is a symmetric matrix called a correlation matrix with a value of 1.0 along the diagonal as each column always perfectly correlates with itself.\"}),/*#__PURE__*/ _jsxs(\"h3\",{children:[\"- Spearman Correlation - \",/*#__PURE__*/ _jsx(\"strong\",{children:\"Rank correlation\"})]}),/*#__PURE__*/ _jsx(\"p\",{children:\"Pearson\u2019s correlation coefficient is the most common correlation measure out there, but it is not the only one out there. Pearson\u2019s correlation can't be used in all cases. It can be used only when certain conditions are met (those are listed above). If those conditions are not met, the rank correlation can be used (Spearman and Kendall correlation).\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Pearson correlation assumes that the data we are comparing is normally distributed. When that assumption is not true, the correlation value is reflecting the true association. Spearman correlation does not assume that data is from a specific distribution, so it is a non-parametric correlation measure.\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Spearman\u2019s rank correlation doesn\u2019t require the relationship between the variables x and y to be linear, nor does it require the variables to be numerical. You use Spearman\u2019s rank when the variables are ordinal or/and quantitative. Rather than examining a linear relationship between x and y, Spearman\u2019s rank correlation tests whether two ordinal or/and quantitative variables are dependent.\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Note that Spearman\u2019s rank applies to ordinal data only.\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Spearman's correlation coefficient, (\u03C1, also signified by \",/*#__PURE__*/ _jsx(\"em\",{children:\"r\"}),\"s) measures the strength and direction of the association between two ranked variables. You interpret the value of Spearman\u2019s rank correlation, \u03C1 the same way you interpret Pearson\u2019s correlation, r. The values of \u03C1 can go between \u20131 and +1. The higher the magnitude of \u03C1 (in the positive or negative directions), the stronger the relationship.\"]}),/*#__PURE__*/ _jsxs(\"h3\",{children:[\"- Kendall correlation - \",/*#__PURE__*/ _jsx(\"strong\",{children:\"Rank correlation\"})]}),/*#__PURE__*/ _jsx(\"p\",{children:\"The Kendall correlation coefficient compares the number of concordant and discordant pairs of data. This coefficient is based on the difference in the counts of concordant and discordant pairs relative to the number of x-y pairs. It\u2019s often denoted with \u03C4 called Kendall\u2019s tau. It is considered an alternative to the nonparametric Spearman correlation coefficient (especially when you have a small sample size with many tied ranks).\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Important facts about the Kendall correlation coefficient are:\"}),/*#__PURE__*/ _jsxs(\"ul\",{style:{\"--framer-font-size\":\"22px\",\"--framer-text-alignment\":\"start\",\"--framer-text-color\":\"rgb(60, 72, 78)\",\"--framer-text-transform\":\"none\"},children:[/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:\"It can take a real value in the range \u22121 \u2264 \u03C4 \u2264 1.\"})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[\"Its maximum value \u03C4 = 1 corresponds to the case when the ranks of the corresponding values in \",/*#__PURE__*/ _jsx(\"strong\",{children:\"x\"}),\" and \",/*#__PURE__*/ _jsx(\"strong\",{children:\"y\"}),\" are the same. In other words, all pairs are concordant.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[\"Its minimum value \u03C4 = \u22121 corresponds to the case when the rankings in \",/*#__PURE__*/ _jsx(\"strong\",{children:\"x\"}),\" are the reverse of the rankings in \",/*#__PURE__*/ _jsx(\"strong\",{children:\"y\"}),\". In other words, all pairs are discordant.\"]})})]}),/*#__PURE__*/ _jsx(\"h2\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\"Correlation Calculation in Pandas\"})}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Pandas offers \",/*#__PURE__*/ _jsx(\"code\",{children:\".corr()\"}),\" function that we can use to calculate correlation coefficient.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Pandas \",/*#__PURE__*/ _jsx(\"code\",{children:\"dataframe.corr()\"}),\" is used to find the pairwise correlation of all columns in the dataframe. Any NA values are automatically excluded. For any non-numeric data type columns in the dataframe it is ignored.\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsxs(\"code\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"df.corr(\"}),/*#__PURE__*/ _jsx(\"em\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\"self\"})}),/*#__PURE__*/ _jsx(\"strong\",{children:\", \"}),/*#__PURE__*/ _jsx(\"em\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\"method='pearson'\"})}),/*#__PURE__*/ _jsx(\"strong\",{children:\", \"}),/*#__PURE__*/ _jsx(\"em\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\"min_periods=1\"})}),/*#__PURE__*/ _jsx(\"strong\",{children:\")\"})]})}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\"Parameters:\"})}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"methods\"}),\" :\"]}),/*#__PURE__*/ _jsxs(\"ul\",{style:{\"--framer-font-size\":\"22px\",\"--framer-text-alignment\":\"start\",\"--framer-text-color\":\"rgb(60, 72, 78)\",\"--framer-text-transform\":\"none\"},children:[/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:\"pearson : Standard correlation coefficient\"})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:\"kendall : Kendall Tau correlation coefficient\"})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:\"spearman : Spearman rank correlation\"})})]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"min_periods :\"}),\" Minimum number of observations required per pair of columns to have a valid result. Currently only available for Pearson and Spearman correlation.\"]}),/*#__PURE__*/ _jsx(\"p\",{children:\"It returns a dataframe (Correlation matrix).\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Let's create a datasets to illustare how the function works.\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Here we are creating a dataframe with two columns that have positive correlation.\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"# creating a datasets to illustrate positive correlation. # importing libraries import numpy as np import pandas as pd from numpy import mean from numpy import std from numpy.random import randn from numpy.random import seed from matplotlib import pyplot # seed random number generator seed(1) # creating data for columns d1 = 30 * randn(1500) + 100 d2 = d1 + (20 * randn(1500) + 50) # let's convert to a dataframe df = pd.DataFrame({'Column1': d1, 'Column2': d2}) # summarize print('d1: mean=%.3f stdv=%.3f' % (mean(d1), std(d1))) print('d2: mean=%.3f stdv=%.3f' % (mean(d2), std(d2))) # plot pyplot.scatter(d1, d2) pyplot.show()\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"df for positive correlation\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,fo1UnpJwgeSUVtTnbnFz9mOOAQ.png\",\"data-framer-height\":\"608\",\"data-framer-width\":\"994\",height:\"304\",src:new URL(\"assets/fo1UnpJwgeSUVtTnbnFz9mOOAQ.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"994 / 608\"},width:\"497\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"scatterplot for df with positive correlation\\xa0\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,d4DGGWnZsgEs3hdY34os6ANNWMY.png\",\"data-framer-height\":\"442\",\"data-framer-width\":\"916\",height:\"221\",src:new URL(\"assets/d4DGGWnZsgEs3hdY34os6ANNWMY.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"916 / 442\"},width:\"458\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Now let's calculate \",/*#__PURE__*/ _jsx(\"strong\",{children:\"Pearson Correlation Coefficient\"}),\" with Pandas \",/*#__PURE__*/ _jsx(\"code\",{children:\".corr()\"}),\" and prove that we are dealing with the positive correlation.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"You will need to run \\xa0\",/*#__PURE__*/ _jsx(\"code\",{children:\"df.corr(method ='pearson')\"}),\" to get Pearson correlation coefficient for your dataframe.\"]}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,7xYEE7h6OLXcYeEPYzsBMl1GE.png\",\"data-framer-height\":\"316\",\"data-framer-width\":\"916\",height:\"158\",src:new URL(\"assets/7xYEE7h6OLXcYeEPYzsBMl1GE.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"916 / 316\"},width:\"458\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Pearson Correlation Coefficient for the test df\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"This is what we expected for the dataframe as it was created to show a positive correlation.\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"A correlation coefficient close to +1 demonstrates a large positive relationship. Any column correlation with self will result in 1. Here the correlation between column1 and column2 is 0.83, which is close to +1, and so this confirms that we are dealing with positive correlation.\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Let's calculate \",/*#__PURE__*/ _jsx(\"strong\",{children:\"Spearman \\xa0Correlation Coefficient\"}),\" with Pandas \",/*#__PURE__*/ _jsx(\"code\",{children:\".corr()\"}),\" and prove that we are dealing with the positive correlation.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"You will need to run \\xa0\",/*#__PURE__*/ _jsx(\"code\",{children:\"df.corr(method ='spearman')\"}),\" to get Pearson Correlation Coefficient for your dataframe.\"]}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,cK3GruSsVL08y8vqXYESaomu33M.png\",\"data-framer-height\":\"374\",\"data-framer-width\":\"900\",height:\"187\",src:new URL(\"assets/cK3GruSsVL08y8vqXYESaomu33M.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"900 / 374\"},width:\"450\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Finally, let's calculate \",/*#__PURE__*/ _jsx(\"strong\",{children:\"Kendall \\xa0Correlation Coefficient\"}),\" with Pandas \",/*#__PURE__*/ _jsx(\"code\",{children:\".corr()\"}),\" and prove that we are dealing with the positive correlation.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"You will need to run \\xa0\",/*#__PURE__*/ _jsx(\"code\",{children:\"df.corr(method ='kendall')\"}),\" to get Pearson Correlation Coefficient for your dataframe.\"]}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,PcU0xVaA865gTqnWguOBJZVVnE4.png\",\"data-framer-height\":\"386\",\"data-framer-width\":\"900\",height:\"193\",src:new URL(\"assets/PcU0xVaA865gTqnWguOBJZVVnE4.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"900 / 386\"},width:\"450\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"The first thing that strikes when comparing correlation coefficients for the test dataframe computed by Pearson and Spearman and Kendall correlation coefficients is the difference between them. Why are they different? We can understand the difference if we understand the assumption of each method.\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"As mentioned before, Pearson's correlation assumes the data is normally distributed. However, Spearman's and Kendall's correlations don't make any assumption on the distribution of the data. That is the main reason for the difference.\"}),/*#__PURE__*/ _jsx(\"h2\",{children:\"Correlation Calculation in SciPy\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Pandas does not have a function that calculates p-values, so it is better to use SciPy to calculate correlation as it will give you both p-value and correlation coefficient.\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"SciPy library has many statistics routines contained in \",/*#__PURE__*/ _jsx(\"code\",{children:/*#__PURE__*/ _jsx(Link,{href:\"https://docs.scipy.org/doc/scipy/reference/stats.html\",openInNewTab:false,smoothScroll:false,children:/*#__PURE__*/ _jsx(\"a\",{children:\"scipy.stats\"})})}),\". You can use the following methods to calculate the three correlation coefficients you saw earlier:\"]}),/*#__PURE__*/ _jsxs(\"ul\",{style:{\"--framer-font-size\":\"22px\",\"--framer-text-alignment\":\"start\",\"--framer-text-color\":\"rgb(60, 72, 78)\",\"--framer-text-transform\":\"none\"},children:[/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"pearsonr()\"})})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"spearmanr()\"})})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"kendalltau()\"})})})]}),/*#__PURE__*/ _jsx(\"p\",{children:\"That's how you would use these functions in Python:\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"We will create a new test dataframe this time with negative correlation.\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"# creating a datasets to illustrate negative correlation. # importing libraries import numpy as np import pandas as pd import scipy from numpy import mean from numpy import std from numpy.random import randn from numpy.random import seed from matplotlib import pyplot # seed random number generator seed(24) # prepare data d1 = 30 * randn(1000) + 100 d2 = d1 * -1 + (20 * randn(1000) + 50) # let's convert to a dataframe df = pd.DataFrame({'Column1': d1, 'Column2': d2}) # summarize print('d1: mean=%.3f stdv=%.3f' % (mean(d1), std(d1))) print('d2: mean=%.3f stdv=%.3f' % (mean(d2), std(d2))) # plot pyplot.scatter(d1, d2) pyplot.show()\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"df for negative correlation\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,kN120nrkG9HNrV9omXKNem6LQQ.png\",\"data-framer-height\":\"600\",\"data-framer-width\":\"900\",height:\"300\",src:new URL(\"assets/kN120nrkG9HNrV9omXKNem6LQQ.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"900 / 600\"},width:\"450\"}),/*#__PURE__*/ _jsx(\"ul\",{style:{\"--framer-font-size\":\"22px\",\"--framer-text-alignment\":\"start\",\"--framer-text-color\":\"rgb(60, 72, 78)\",\"--framer-text-transform\":\"none\"},children:/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\"Pearson correlation coefficient and the p-value\"})})})}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"The \",/*#__PURE__*/ _jsxs(\"code\",{children:[\"scipy.stats.pearsonr(\",/*#__PURE__*/ _jsx(\"em\",{children:\"x\"}),/*#__PURE__*/ _jsx(\"strong\",{children:\", \"}),/*#__PURE__*/ _jsx(\"em\",{children:\"y)\"})]}),/*#__PURE__*/ _jsx(\"em\",{children:\" \"}),\"calculates a Pearson correlation coefficient and the p-value for testing non-correlation.\"]}),/*#__PURE__*/ _jsx(\"p\",{children:\"The Pearson correlation coefficient measures the linear relationship between two datasets.\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"The p-value roughly indicates the probability of an uncorrelated system producing datasets that have a Pearson correlation at least as extreme as the one computed from these datasets. The p-values are not entirely reliable but are probably \",/*#__PURE__*/ _jsx(Link,{href:\"https://www.researchgate.net/publication/310735983_Sample_Size_Guideline_for_Correlation_Analysis\",openInNewTab:false,smoothScroll:false,children:/*#__PURE__*/ _jsx(\"a\",{children:\"reasonable for datasets larger than 500 or so\"})}),\".\"]}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,K0W9M6fZxLDWSe5Tcjr049NuUs.png\",\"data-framer-height\":\"584\",\"data-framer-width\":\"2030\",height:\"292\",src:new URL(\"assets/K0W9M6fZxLDWSe5Tcjr049NuUs.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"2030 / 584\"},width:\"1015\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"As expected, the function produced correlation coefficient -0.8494613, that is close to -1, and it confirms a strong negative correlation. The returned p-value is < 0.001, and so it confirms strong certainty in the result.\"}),/*#__PURE__*/ _jsx(\"ul\",{style:{\"--framer-font-size\":\"22px\",\"--framer-text-alignment\":\"start\",\"--framer-text-color\":\"rgb(60, 72, 78)\",\"--framer-text-transform\":\"none\"},children:/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\"Spearman correlation coefficient and the p-value\"})})})}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"The\",/*#__PURE__*/ _jsx(\"strong\",{children:\" \"}),/*#__PURE__*/ _jsxs(\"code\",{children:[\"scipy.stats.spearmanr(\",/*#__PURE__*/ _jsx(\"em\",{children:\"a\"}),/*#__PURE__*/ _jsx(\"strong\",{children:\", \"}),/*#__PURE__*/ _jsx(\"em\",{children:\"b=None\"}),/*#__PURE__*/ _jsx(\"strong\",{children:\", \"}),/*#__PURE__*/ _jsx(\"em\",{children:\"axis=0\"}),/*#__PURE__*/ _jsx(\"strong\",{children:\", \"}),/*#__PURE__*/ _jsx(\"em\",{children:\"nan_policy='propagate')\"})]}),/*#__PURE__*/ _jsx(\"em\",{children:\" \"}),\"calculates a Spearman correlation coefficient with associated p-value.\"]}),/*#__PURE__*/ _jsx(\"p\",{children:\"The Spearman rank-order correlation coefficient is a nonparametric measure of the monotonicity of the relationship between two datasets. Unlike the Pearson correlation, the Spearman correlation does not assume that both datasets are normally distributed.\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"The p-value roughly indicates the probability of an uncorrelated system producing datasets that have a Spearman correlation at least as extreme as the one computed from these datasets.\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\"Parameters:\"})}),/*#__PURE__*/ _jsxs(\"ul\",{style:{\"--framer-font-size\":\"22px\",\"--framer-text-alignment\":\"start\",\"--framer-text-color\":\"rgb(60, 72, 78)\",\"--framer-text-transform\":\"none\"},children:[/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[\"a, b: 1D or 2D array_like, b is optional. One or two 1-D or 2-D arrays containing multiple variables and observations. When these are 1-D, each represents a vector of observations of a single variable. For the behavior in the 2-D case, see under \",/*#__PURE__*/ _jsx(\"code\",{children:\"axis\"}),\", below. Both arrays need to have the same length in the \",/*#__PURE__*/ _jsx(\"code\",{children:\"axis\"}),\" dimension.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"axis\"}),\" : int or None, optional. If axis=0 (default), then each column represents a variable, with observations in the rows. If axis=1, the relationship is transposed: each row represents a variable, while the columns contain observations. If axis=None, then both arrays will be raveled.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"nan_policy : {\u2018propagate\u2019, \u2018raise\u2019, \u2018omit\u2019}, optional. \"}),\"Defines how to handle when input contains nan. The following options are available (default is \",/*#__PURE__*/ _jsx(\"code\",{children:\"propagate\"}),\"): \",/*#__PURE__*/ _jsx(\"code\",{children:\"propagate\"}),\": returns nan, \",/*#__PURE__*/ _jsx(\"code\",{children:\"raise\"}),\": throws an error, and \",/*#__PURE__*/ _jsx(\"code\",{children:\"omit\"}),\": performs the calculations ignoring nan values\"]})})]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"The\"}),\" \",/*#__PURE__*/ _jsxs(\"code\",{children:[\"scipy.stats.spearmanr(\",/*#__PURE__*/ _jsx(\"em\",{children:\"a\"}),/*#__PURE__*/ _jsx(\"strong\",{children:\", \"}),/*#__PURE__*/ _jsx(\"em\",{children:\"b=None\"}),/*#__PURE__*/ _jsx(\"strong\",{children:\", \"}),/*#__PURE__*/ _jsx(\"em\",{children:\"axis=0\"}),/*#__PURE__*/ _jsx(\"strong\",{children:\", \"}),/*#__PURE__*/ _jsx(\"em\",{children:\"nan_policy='propagate')\"})]}),/*#__PURE__*/ _jsx(\"strong\",{children:\" function returns:\"})]}),/*#__PURE__*/ _jsxs(\"ul\",{style:{\"--framer-font-size\":\"22px\",\"--framer-text-alignment\":\"start\",\"--framer-text-color\":\"rgb(60, 72, 78)\",\"--framer-text-transform\":\"none\"},children:[/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"correlation\"}),\" : float or ndarray (2-D square). Spearman correlation matrix or correlation coefficient (if only 2 variables are given as parameters. Correlation matrix is square with length equal to total number of variables (columns or rows) in a and b combined.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"p\"}),\"-\",/*#__PURE__*/ _jsx(\"strong\",{children:\"value\"}),\" : float. The two-sided p-value for a hypothesis test whose null hypothesis is that two sets of data are uncorrelated, has same dimension as rho.\"]})})]}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,iIqLVh7wN7Wln4KUsAKEggB2PA.png\",\"data-framer-height\":\"424\",\"data-framer-width\":\"1372\",height:\"212\",src:new URL(\"assets/iIqLVh7wN7Wln4KUsAKEggB2PA.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1372 / 424\"},width:\"686\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"We know that the data is Gaussian and that the relationship between the variables is linear. Nevertheless, the nonparametric rank-based approach shows a strong correlation between the variables of 0.85. Returned p-value is < 0.001 and so confirms strong certainty in the result.\"}),/*#__PURE__*/ _jsx(\"ul\",{style:{\"--framer-font-size\":\"22px\",\"--framer-text-alignment\":\"start\",\"--framer-text-color\":\"rgb(60, 72, 78)\",\"--framer-text-transform\":\"none\"},children:/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\"Kendall correlation coefficient and the p-value\"})})})}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"The \",/*#__PURE__*/ _jsxs(\"code\",{children:[\"scipy.stats.kendalltau\",/*#__PURE__*/ _jsx(\"strong\",{children:\"(\"}),/*#__PURE__*/ _jsx(\"em\",{children:\"x\"}),/*#__PURE__*/ _jsx(\"strong\",{children:\", \"}),/*#__PURE__*/ _jsx(\"em\",{children:\"y\"}),/*#__PURE__*/ _jsx(\"strong\",{children:\", \"}),/*#__PURE__*/ _jsx(\"em\",{children:\"nan_policy='propagate'\"}),/*#__PURE__*/ _jsx(\"strong\",{children:\", \"}),/*#__PURE__*/ _jsx(\"em\",{children:\"method='auto'\"}),/*#__PURE__*/ _jsx(\"strong\",{children:\")\"})]}),/*#__PURE__*/ _jsx(\"strong\",{children:\" \"}),\"calculates Kendall\u2019s tau, a correlation measure for ordinal data.\"]}),/*#__PURE__*/ _jsx(\"p\",{children:\"Kendall\u2019s tau is a measure of the correspondence between two rankings. Values close to 1 indicate strong agreement, values close to -1 indicate strong disagreement.\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\"Parameters:\"})}),/*#__PURE__*/ _jsxs(\"ul\",{style:{\"--framer-font-size\":\"22px\",\"--framer-text-alignment\":\"start\",\"--framer-text-color\":\"rgb(60, 72, 78)\",\"--framer-text-transform\":\"none\"},children:[/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"x, y\"}),\"array_like. \\xa0Arrays of rankings, of the same shape. If arrays are not 1-D, they will be flattened to 1-D.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"nan_policy\"}),\" : {\u2018propagate\u2019, \u2018raise\u2019, \u2018omit\u2019}, optional. Defines how to handle when input contains nan. The following options are available (default is \",/*#__PURE__*/ _jsx(\"code\",{children:\"propagate\"}),\"): \",/*#__PURE__*/ _jsx(\"code\",{children:\"propagate\"}),\": returns nan, \",/*#__PURE__*/ _jsx(\"code\",{children:\"raise\"}),\": throws an error, and \",/*#__PURE__*/ _jsx(\"code\",{children:\"omit\"}),\": performs the calculations ignoring nan values.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"method\"}),\": {\u2018auto\u2019, \u2018asymptotic\u2019, \u2018exact\u2019}, optional. Defines which method is used to calculate the p-value. The following options are available (default is \",/*#__PURE__*/ _jsx(\"code\",{children:\"auto\"}),\"): \",/*#__PURE__*/ _jsx(\"code\",{children:\"auto\"}),\": selects the appropriate method based on a trade-off between speed and accuracy. \",/*#__PURE__*/ _jsx(\"code\",{children:\"asymptotic\"}),\": uses a normal approximation valid for large samples. \",/*#__PURE__*/ _jsx(\"code\",{children:\"exact\"}),\": computes the exact p-value, but can only be used if no ties are present.\"]})})]}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"The \",/*#__PURE__*/ _jsxs(\"code\",{children:[\"scipy.stats.kendalltau\",/*#__PURE__*/ _jsx(\"strong\",{children:\"(\"}),/*#__PURE__*/ _jsx(\"em\",{children:\"x\"}),/*#__PURE__*/ _jsx(\"strong\",{children:\", \"}),/*#__PURE__*/ _jsx(\"em\",{children:\"y\"}),/*#__PURE__*/ _jsx(\"strong\",{children:\", \"}),/*#__PURE__*/ _jsx(\"em\",{children:\"nan_policy='propagate'\"}),/*#__PURE__*/ _jsx(\"strong\",{children:\", \"}),/*#__PURE__*/ _jsx(\"em\",{children:\"method='auto'\"}),/*#__PURE__*/ _jsx(\"strong\",{children:\")\"})]}),/*#__PURE__*/ _jsx(\"strong\",{children:\" \"}),\"function returns:\"]}),/*#__PURE__*/ _jsxs(\"ul\",{style:{\"--framer-font-size\":\"22px\",\"--framer-text-alignment\":\"start\",\"--framer-text-color\":\"rgb(60, 72, 78)\",\"--framer-text-transform\":\"none\"},children:[/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"correlation\"}),\" float\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[\"The tau statistic - \",/*#__PURE__*/ _jsx(\"strong\",{children:\"p-value float. \"}),\"The two-sided p-value for a hypothesis test whose null hypothesis is an absence of association, tau = 0.\"]})})]}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,QWBaVhApdVTxXL1LIFtrj1xAkI.png\",\"data-framer-height\":\"268\",\"data-framer-width\":\"1164\",height:\"134\",src:new URL(\"assets/QWBaVhApdVTxXL1LIFtrj1xAkI.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1164 / 268\"},width:\"582\"}),/*#__PURE__*/ _jsx(\"h2\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\"Visualization of Correlation with Matplotlib and Seaborn\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"The fastest way to learn more about your data is to use data visualization. In this section, you\u2019ll learn how to visually represent the relationship between two features with an x-y plot. You\u2019ll also use heatmaps to visualize a correlation matrix and scatterplot matrix.\"}),/*#__PURE__*/ _jsx(\"ul\",{style:{\"--framer-font-size\":\"22px\",\"--framer-text-alignment\":\"start\",\"--framer-text-color\":\"rgb(60, 72, 78)\",\"--framer-text-transform\":\"none\"},children:/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"em\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\"Scatterplot matrix\"})})})})}),/*#__PURE__*/ _jsx(\"p\",{children:\"A scatterplot shows the relationship between two variables as dots in two dimensions, one axis for each attribute. You can create a scatterplot for each pair of attributes in your data. Drawing all these scatterplots together is called a scatterplot matrix.\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Scatter plots are useful for spotting structured relationships between variables, like whether you could summarize the relationship between two variables with a line. Attributes with structured relationships may also be correlated and good candidates for removal from your dataset. You don't need to delete anything from the test dataframe, but when dealing with real world data this can be necessary.\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsxs(\"code\",{children:[\"pandas.plotting.scatter_matrix(frame, alpha=0.5, figsize=None, ax=None, grid=False, diagonal='hist', marker=\",/*#__PURE__*/ _jsx(\"em\",{children:\"'.'\"}),\", density_kwds=None, hist_kwds=None, range_padding=0.05, \",/*#__PURE__*/ _jsx(\"em\",{children:\"**kwargs\"}),\")\"]}),\" - The command syntax for a scatterplot matrix.\"]}),/*#__PURE__*/ _jsx(\"p\",{children:\"For scatterplt matrix we are using the same test df as in SciPy section.\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"# Scatterplot Matrix - Histogram plots # import pandas # from matplotlib import pyplot from pandas.plotting import scatter_matrix scatter_matrix(df, figsize = (14,8)) pyplot.show()\"})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,V7nvMrKlhL2qOrmANoxXdg5MbvM.png\",\"data-framer-height\":\"1340\",\"data-framer-width\":\"2026\",height:\"670\",src:new URL(\"assets/V7nvMrKlhL2qOrmANoxXdg5MbvM.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"2026 / 1340\"},width:\"1013\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"# Scatterplot Matrix - Kernel Density Estimation scatter_matrix(df, alpha = 0.3, figsize = (14,8), diagonal = 'kde') pyplot.show()\"})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,CbT3pgjibhDftCZW7k6rwyWIGdo.png\",\"data-framer-height\":\"1118\",\"data-framer-width\":\"2056\",height:\"559\",src:new URL(\"assets/CbT3pgjibhDftCZW7k6rwyWIGdo.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"2056 / 1118\"},width:\"1028\"}),/*#__PURE__*/ _jsx(\"ul\",{style:{\"--framer-font-size\":\"22px\",\"--framer-text-alignment\":\"start\",\"--framer-text-color\":\"rgb(60, 72, 78)\",\"--framer-text-transform\":\"none\"},children:/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"em\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\"X-Y Plots With a Regression Line\"})})})})}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Now you\u2019ll see how to create an x-y plot with the regression line, its equation, and the Pearson correlation coefficient. The slope and the intercept of the regression line, as well as the correlation coefficient are calculated with \",/*#__PURE__*/ _jsx(\"code\",{children:\"linregress()\"}),\".\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"# creating X-Y Plots With a Regression Line # slope, intersept, and correlation coefficient calculation slope, intercept, r, p, stderr = scipy.stats.linregress(df['Column1'], df['Column2']) line = f'Regression line: y={intercept:.2f}+{slope:.2f}x, r={r:.2f}' # plotting fig, ax = pyplot.subplots(figsize = (14,8)) ax.plot(df['Column1'], df['Column2'], linewidth=0, marker='s', label='Data points') ax.plot(df['Column1'], intercept + slope * df['Column1'], label=line) ax.set_xlabel('Column1') ax.set_ylabel('Column2') ax.legend(facecolor='white') pyplot.show()\"})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,ywGPvMCmDsPocgrD1Pfa5Ri3U.png\",\"data-framer-height\":\"1370\",\"data-framer-width\":\"2040\",height:\"685\",src:new URL(\"assets/ywGPvMCmDsPocgrD1Pfa5Ri3U.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"2040 / 1370\"},width:\"1020\"}),/*#__PURE__*/ _jsx(\"ul\",{style:{\"--framer-font-size\":\"22px\",\"--framer-text-alignment\":\"start\",\"--framer-text-color\":\"rgb(60, 72, 78)\",\"--framer-text-transform\":\"none\"},children:/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"em\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\"Heatmaps of Correlation Matrices\"})})})})}),/*#__PURE__*/ _jsx(\"p\",{children:\"You can calculate the correlation between each pair of attributes. This is called a correlation matrix. You can then plot the correlation matrix and get an idea of which variables have a high correlation with each other.\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"The easiest way to get a pretty heatmap is to use seaborn library. So let's do this.\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:\"seaborn.heatmap(data, vmin=None, vmax=None, cmap=None, center=None, robust=False, annot=None, fmt='.2g', annot_kws=None, linewidths=0, linecolor='white', cbar=True, cbar_kws=None, cbar_ax=None, square=False, xticklabels='auto', yticklabels='auto', mask=None, ax=None, **kwargs)\"}),\" - Plots rectangular data as a color-encoded matrix.\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"import seaborn as sns f, ax = pyplot.subplots(figsize=(14, 8)) corr = df.corr() sns.heatmap(corr, mask=np.zeros_like(corr, dtype=np.bool), cmap=sns.diverging_palette(220, 10, as_cmap=True), square=True, annot=True, ax=ax)\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"Your output should look like this:\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,vUHTplQSlqvbCARIuCwjFAg9A.png\",\"data-framer-height\":\"937\",\"data-framer-width\":\"2000\",height:\"468\",src:new URL(\"assets/vUHTplQSlqvbCARIuCwjFAg9A.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"2000 / 937\"},width:\"1000\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"The command returns a table with the coefficients. It sort of looks like the Pandas output with colored backgrounds. The colors help you interpret the output. In this example, the red color represents the number 1, blue corresponds to -0.85.\"}),/*#__PURE__*/ _jsx(\"h2\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\"Conclusion\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"You now should have an understanding of correlation, correlation coefficients and p-values.\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"You can calculate with Python:\"}),/*#__PURE__*/ _jsxs(\"ul\",{style:{\"--framer-font-size\":\"22px\",\"--framer-text-alignment\":\"start\",\"--framer-text-color\":\"rgb(60, 72, 78)\",\"--framer-text-transform\":\"none\"},children:[/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Pearson\u2019s\"}),\" product-moment correlation coefficient and p value\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Spearman\u2019s\"}),\" rank correlation coefficient and p value\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Kendall\u2019s\"}),\" rank correlation coefficient and p value\"]})})]}),/*#__PURE__*/ _jsx(\"p\",{children:\"You also know how to visualize data as: regression lines, scatterplot matrices, and correlation heatmaps with Matplotlib plots or Seaborn.\"})]}),qmKEIZQOx:\"rgb(0, 153, 255)\",V8PWfbvT8:\"exploring-correlation-in-python\",vny2uxJff:{alt:\"\",src:new URL(\"assets/rS9nTqONX8vtkOsxI4wsxBRnSo.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,srcSet:`${new URL(\"assets/512/rS9nTqONX8vtkOsxI4wsxBRnSo.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 512w, ${new URL(\"assets/1024/rS9nTqONX8vtkOsxI4wsxBRnSo.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 1024w, ${new URL(\"assets/rS9nTqONX8vtkOsxI4wsxBRnSo.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 2000w`},ZckEhR3V3:\"Exploring Correlation in Python: Pandas, SciPy\"},{Djh5_J2Mt:\"Guides\",id:\"P06CiEgjw\",iP8mvmvMM:\"2020-03-22T00:00:00.000Z\",KbGlbG3Yd:/*#__PURE__*/ _jsxs(React.Fragment,{children:[/*#__PURE__*/ _jsx(\"p\",{children:\"In this article, I will use examples to show you how to add columns to a dataframe in Pandas. There is more than one way of adding columns to a Pandas dataframe, let\u2019s review the main approaches.\"}),/*#__PURE__*/ _jsx(\"h2\",{children:\"Create a Dataframe\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"As usual let's start by creating a dataframe.\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Create a simple dataframe with \\xa0a dictionary of lists, and column names: \",/*#__PURE__*/ _jsx(\"strong\",{children:\"name, age, city, country\"}),\".\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"# Creating simple dataframe # List of Tuples students = [ ('Jack', 34, 'Sydeny' , 'Australia') , ('Riti', 30, 'Delhi' , 'India' ) , ('Tom', 31, 'Mumbai' , 'India' ) , ('Neelu', 32, 'Bangalore' , 'India' ) , ('John', 16, 'New York' , 'US') , ('Mike', 17, 'las vegas' , 'US') ] #Create a DataFrame object df = pd.DataFrame(students, columns = ['Name' , 'Age', 'City' , 'Country'], index=['a', 'b', 'c' , 'd' , 'e' , 'f'])\"})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,94B3TiTLWvJ73Vosk2WVlGJruo.png\",\"data-framer-height\":\"410\",\"data-framer-width\":\"806\",height:\"205\",src:new URL(\"assets/94B3TiTLWvJ73Vosk2WVlGJruo.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"806 / 410\"},width:\"403\"}),/*#__PURE__*/ _jsx(\"h2\",{children:\"I. Add a column to Pandas Dataframe with a default value\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"When trying to set the entire column of a dataframe to a specific value, use one of the four methods shown below.\"}),/*#__PURE__*/ _jsxs(\"ul\",{style:{\"--framer-font-size\":\"22px\",\"--framer-text-alignment\":\"start\",\"--framer-text-color\":\"rgb(60, 72, 78)\",\"--framer-text-transform\":\"none\"},children:[/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[\"By declaring a new \",/*#__PURE__*/ _jsx(\"code\",{children:\"list\"}),\" as a column\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"loc\"})})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\".assign()\"})})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\".insert()\"})})})]}),/*#__PURE__*/ _jsx(\"h3\",{children:\"Method I.1: By declaring a new list as a column\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:\"df['New_Column']='value'\"}),\" will add the new column and set all rows to that value.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"In this example, we will create a dataframe \",/*#__PURE__*/ _jsx(\"code\",{children:\"df\"}),\" and add a new column with the name \",/*#__PURE__*/ _jsx(\"code\",{children:\"Course\"}),\" to it.\"]}),/*#__PURE__*/ _jsx(\"p\",{children:\"Your Dataframe before we add a new column:\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,94B3TiTLWvJ73Vosk2WVlGJruo.png\",\"data-framer-height\":\"410\",\"data-framer-width\":\"806\",height:\"205\",src:new URL(\"assets/94B3TiTLWvJ73Vosk2WVlGJruo.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"806 / 410\"},width:\"403\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"# Method 1: By declaring a new list as a column df['Course'] = 'Computer science' df\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"Your Dataframe after adding a new column:\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,D3T3gMG0REe9qRmP3UpusQRpMrk.png\",\"data-framer-height\":\"540\",\"data-framer-width\":\"918\",height:\"270\",src:new URL(\"assets/D3T3gMG0REe9qRmP3UpusQRpMrk.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"918 / 540\"},width:\"459\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Some of you may get the following warning -\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:'\"A value is trying to be set on a copy of a slice from a DataFrame\"'}),\".\"]}),/*#__PURE__*/ _jsx(\"p\",{children:\"This error is usually a result of creating a slice of the original dataframe before declaring your new column. To avoid the error add your new column to the original dataframe and then create the slice:\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:\".loc[row_indexer,col_indexer] = value instead\"}),\".\"]}),/*#__PURE__*/ _jsx(\"p\",{children:\"Python can do unexpected things when new objects are defined from existing ones. A slice of dataframe is just a stand-in for the rows stored in the original dataframe object: a new object is not created in memory.\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"To avoid these issues altogether use the \",/*#__PURE__*/ _jsx(\"code\",{children:\"copy\"}),\"or \",/*#__PURE__*/ _jsx(\"code\",{children:\"deepcopy\"}),\" module, which explicitly forces objects to be copied in memory so that methods called on the new objects are not applied to the source object.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Or you can use the \",/*#__PURE__*/ _jsx(\"code\",{children:\".loc[]\"}),\" method as suggested by Pandas error message.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"em\",{children:\"For more information, see the caveats in the documentation: \"}),/*#__PURE__*/ _jsx(Link,{href:\"https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html\",openInNewTab:false,smoothScroll:false,children:/*#__PURE__*/ _jsx(\"a\",{children:/*#__PURE__*/ _jsx(\"em\",{children:\"https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html\"})})}),/*#__PURE__*/ _jsx(\"em\",{children:\".\"})]}),/*#__PURE__*/ _jsx(\"h3\",{children:\"Method I.2: Using .loc[]\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"The \",/*#__PURE__*/ _jsx(Link,{href:\"https://re-thought.com/how-to-add-new-columns-in-a-dataframe-in-pandas/pandas.DataFrame.loc\",openInNewTab:false,smoothScroll:false,children:/*#__PURE__*/ _jsx(\"a\",{children:\"pandas.DataFrame.loc\"})}),\" allows to access a group of rows and columns by label(s) or a boolean array.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:\".loc[]\"}),\" is primarily label based, but may also be used with a boolean array.\"]}),/*#__PURE__*/ _jsx(\"p\",{children:\"Allowed inputs are:\"}),/*#__PURE__*/ _jsxs(\"ul\",{style:{\"--framer-font-size\":\"22px\",\"--framer-text-alignment\":\"start\",\"--framer-text-color\":\"rgb(60, 72, 78)\",\"--framer-text-transform\":\"none\"},children:[/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[\"A single label, e.g. \",/*#__PURE__*/ _jsx(\"code\",{children:\"5\"}),\" or \",/*#__PURE__*/ _jsx(\"code\",{children:\"'a'\"}),\", (note that \",/*#__PURE__*/ _jsx(\"code\",{children:\"5\"}),\" is interpreted as a \",/*#__PURE__*/ _jsx(\"em\",{children:\"label\"}),\" of the index, and \",/*#__PURE__*/ _jsx(\"strong\",{children:\"never\"}),\" as an integer position along the index).\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[\"A list or an array of labels, e.g. \",/*#__PURE__*/ _jsx(\"code\",{children:\"['a', 'b', 'c']\"}),\".\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[\"A slice object with labels, e.g. \",/*#__PURE__*/ _jsx(\"code\",{children:\"'a':'f'\"}),\".\"]})})]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:\"df.loc[:,'New_Column'] = 'value'\"}),\" - You can use '.loc' with ':' to add \\xa0a specified value for all rows.\"]}),/*#__PURE__*/ _jsx(\"p\",{children:\"Your Dataframe before we add a new column:\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,0G5k4mZwwCOsc5XtJU1bf9Mzbt8.png\",\"data-framer-height\":\"428\",\"data-framer-width\":\"974\",height:\"214\",src:new URL(\"assets/0G5k4mZwwCOsc5XtJU1bf9Mzbt8.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"974 / 428\"},width:\"487\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"# Method 2: Using .loc[] df.loc[:,'Grade'] = 'A' df\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"Your Dataframe after adding a new column:\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,3kcLKTizMeHIyG445oSM3FFkZ0.png\",\"data-framer-height\":\"538\",\"data-framer-width\":\"1088\",height:\"269\",src:new URL(\"assets/3kcLKTizMeHIyG445oSM3FFkZ0.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1088 / 538\"},width:\"544\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"The \",/*#__PURE__*/ _jsx(\"code\",{children:\".loc[]\"}),\" has two limitations: it mutates the dataframe in-place, and it can't be used with method chaining. If you are experiencing this problem, use the \",/*#__PURE__*/ _jsx(\"code\",{children:\".assign()\"}),\" method.\"]}),/*#__PURE__*/ _jsx(\"h3\",{children:\"Method I.3: Using the .assign() function\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"The\",/*#__PURE__*/ _jsx(\"strong\",{children:\" \"}),/*#__PURE__*/ _jsx(\"code\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\".assign()\"})}),\" function returns a new object with all original columns as well as the new ones. Existing columns that are re-assigned will be overwritten. The column names are keywords. If the values are callable, they are computed on the dataframe and assigned to the new columns.\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df = df.assign(New_Column='value')\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"Your Dataframe before we add a new column:\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,zSN2TAmK6K8Nq5X92pETvIPJ3Y.png\",\"data-framer-height\":\"514\",\"data-framer-width\":\"958\",height:\"257\",src:new URL(\"assets/zSN2TAmK6K8Nq5X92pETvIPJ3Y.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"958 / 514\"},width:\"479\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"# Method 3: Using .assign() function df = df.assign(Year='3') df\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"Your Dataframe after adding a new column:\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,JuwxTOq8RWxedUa4TOjEUO6kuo.png\",\"data-framer-height\":\"516\",\"data-framer-width\":\"972\",height:\"258\",src:new URL(\"assets/JuwxTOq8RWxedUa4TOjEUO6kuo.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"972 / 516\"},width:\"486\"}),/*#__PURE__*/ _jsx(\"h3\",{children:\"Method I.4: Using the .insert() function\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"An advantage of the \",/*#__PURE__*/ _jsx(\"code\",{children:\".insert()\"}),\" method is that it gives the freedom to add a column at any position we like and not just at the end of the Dataframe. It also provides different options for inserting column values.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Parameters for \",/*#__PURE__*/ _jsx(\"code\",{children:\".insert()\"}),\" :\"]}),/*#__PURE__*/ _jsxs(\"ul\",{style:{\"--framer-font-size\":\"22px\",\"--framer-text-alignment\":\"start\",\"--framer-text-color\":\"rgb(60, 72, 78)\",\"--framer-text-transform\":\"none\"},children:[/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"loc: \"}),\"loc is an integer which is the location of a column where we want to insert a new column. This will shift the existing column at that position to the right.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"column: \"}),\"column is a string which is the name of a column to be inserted.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"value: \"}),\"value is simply the value to be inserted. It can be an integer, a string, a float or even a series / list of values. Providing only one value will set the same value for all rows.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"allow_duplicates : \"}),\"allow_duplicates is a boolean value which checks wheather or not a column with the same name already exists.\"]})})]}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"With the \",/*#__PURE__*/ _jsx(\"code\",{children:\".insert()\"}),\" function you can set an entire column of a Dataframe to a specific value by - \",/*#__PURE__*/ _jsx(\"code\",{children:\"df.insert(2, 'New_Column', 'value', True)\"})]}),/*#__PURE__*/ _jsx(\"p\",{children:\"Your Dataframe before we add a new column:\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,WLxHsuJHmwBdRyxgDkgv3sanKsc.png\",\"data-framer-height\":\"414\",\"data-framer-width\":\"944\",height:\"207\",src:new URL(\"assets/WLxHsuJHmwBdRyxgDkgv3sanKsc.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"944 / 414\"},width:\"472\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Your Dataframe after adding a new column:\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,2B2faXrOREB51HZ7omiuKsB1q9k.png\",\"data-framer-height\":\"528\",\"data-framer-width\":\"1112\",height:\"264\",src:new URL(\"assets/2B2faXrOREB51HZ7omiuKsB1q9k.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1112 / 528\"},width:\"556\"}),/*#__PURE__*/ _jsx(\"h2\",{children:\"II. Add a new column with different values\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"All the methods that are cowered above can also be used to assign a new column with different values to a dataframe.\"}),/*#__PURE__*/ _jsx(\"h3\",{children:\"Method II.1: By declaring a new list as a column\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"You can append a new column with different values to a dataframe using method I.1 but with a list that contains multiple values. \\xa0So instead of \",/*#__PURE__*/ _jsx(\"code\",{children:\"df['New_Column']='value'\"}),\" use\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df['New_Column']=['value1','value2','value 3']\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"When using this method you will need to keep the following in mind:\"}),/*#__PURE__*/ _jsxs(\"ul\",{style:{\"--framer-font-size\":\"22px\",\"--framer-text-alignment\":\"start\",\"--framer-text-color\":\"rgb(60, 72, 78)\",\"--framer-text-transform\":\"none\"},children:[/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[\"If values provided in the list are less than a number of indexes, then it will give a \",/*#__PURE__*/ _jsx(\"em\",{children:\"Value Error\"}),\".\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:\"If a column already exists, then all of its values will be replaced.\"})})]}),/*#__PURE__*/ _jsx(\"p\",{children:\"Your Dataframe before we add a new column:\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,I9qOtXuuFGcvZxTJC5yJnuLFP9E.png\",\"data-framer-height\":\"424\",\"data-framer-width\":\"870\",height:\"212\",src:new URL(\"assets/I9qOtXuuFGcvZxTJC5yJnuLFP9E.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"870 / 424\"},width:\"435\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Your Dataframe after adding a new column:\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,P7uQpi6MyirfO0vgyhCdY4Q00.png\",\"data-framer-height\":\"560\",\"data-framer-width\":\"972\",height:\"280\",src:new URL(\"assets/P7uQpi6MyirfO0vgyhCdY4Q00.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"972 / 560\"},width:\"486\"}),/*#__PURE__*/ _jsx(\"h3\",{children:\"Method II.2: Using .loc[]\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"In this case you will need to change method I.2\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df.loc[:,'New_Column'] = 'value'\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"to\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df.loc[:, 'New_Column'] = ['value1','value2','value3']\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"Your Dataframe before we add a new column:\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,gSlYsfHXlxKO1GCuxsSLePSk1AU.png\",\"data-framer-height\":\"394\",\"data-framer-width\":\"932\",height:\"197\",src:new URL(\"assets/gSlYsfHXlxKO1GCuxsSLePSk1AU.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"932 / 394\"},width:\"466\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Your Dataframe after adding a new column:\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,RRrYSbZQwHKtpr4k5jIMcTwTzkU.png\",\"data-framer-height\":\"568\",\"data-framer-width\":\"1086\",height:\"284\",src:new URL(\"assets/RRrYSbZQwHKtpr4k5jIMcTwTzkU.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1086 / 568\"},width:\"543\"}),/*#__PURE__*/ _jsx(\"h3\",{children:\"Method II.3 Using the .assign() function\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"When you want to add a new column with different values to a dataframe using the \",/*#__PURE__*/ _jsx(\"code\",{children:\".assign()\"}),\" \\xa0function you will need to change\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df = df.assign(New_Column='value')\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"to\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df = df.assign(New_column=['value1', 'value2', 'value3'])\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"Your Dataframe before we add a new column:\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,Gg8Bkyu4yLy1DcCuNu29JmaDoIg.png\",\"data-framer-height\":\"420\",\"data-framer-width\":\"968\",height:\"210\",src:new URL(\"assets/Gg8Bkyu4yLy1DcCuNu29JmaDoIg.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"968 / 420\"},width:\"484\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Your Dataframe after adding a new column:\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,sC88WC39E1Uq3GCDusNdmrF3Tc.png\",\"data-framer-height\":\"542\",\"data-framer-width\":\"1302\",height:\"271\",src:new URL(\"assets/sC88WC39E1Uq3GCDusNdmrF3Tc.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1302 / 542\"},width:\"651\"}),/*#__PURE__*/ _jsx(\"h3\",{children:\"Method II.4 Using the .insert() function\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"You can use the\",/*#__PURE__*/ _jsx(\"code\",{children:\".insert()\"}),\"function to inserting a column in a specific location. To add a new column with different values to a dataframe use:\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df.insert(loc=1, column=\\\"New Column\\\", value=['value1', 'value2','value3'])\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"Your Dataframe before we add a new column:\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,c7I0LuScIOFlQ9OJZHXP3d08raY.png\",\"data-framer-height\":\"410\",\"data-framer-width\":\"1312\",height:\"205\",src:new URL(\"assets/c7I0LuScIOFlQ9OJZHXP3d08raY.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1312 / 410\"},width:\"656\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Your Dataframe after adding a new column:\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,HWnUnGZW6F7XFYQCoJGHNM9cs8U.png\",\"data-framer-height\":\"526\",\"data-framer-width\":\"1564\",height:\"263\",src:new URL(\"assets/HWnUnGZW6F7XFYQCoJGHNM9cs8U.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1564 / 526\"},width:\"782\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Please note that there are many more ways of adding a column to a Pandas dataframe. However, knowing these four should be more than sufficient.\"}),/*#__PURE__*/ _jsx(\"h2\",{children:\"Conclusion:\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Now you should understand the basics of adding columns to a dataset in Pandas. I hope you've found this post helpful. If you want to go deeper into the subject, there are some great answers on StackOverflow.\"})]}),qmKEIZQOx:\"rgb(0, 153, 255)\",V8PWfbvT8:\"how-to-add-new-columns-in-a-dataframe-in-pandas\",vny2uxJff:{alt:\"\",src:new URL(\"assets/kj7nLu9HLhs8J5p24PTQvDvDM.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,srcSet:`${new URL(\"assets/512/kj7nLu9HLhs8J5p24PTQvDvDM.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 512w, ${new URL(\"assets/1024/kj7nLu9HLhs8J5p24PTQvDvDM.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 1024w, ${new URL(\"assets/kj7nLu9HLhs8J5p24PTQvDvDM.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 2000w`},ZckEhR3V3:\"How to add new columns to Pandas dataframe?\"},{Djh5_J2Mt:\"Guides\",id:\"TLuIKrGMS\",iP8mvmvMM:\"2020-02-02T00:00:00.000Z\",KbGlbG3Yd:/*#__PURE__*/ _jsxs(React.Fragment,{children:[/*#__PURE__*/ _jsxs(\"p\",{children:[\"While working with data in Pandas, you might want to drop a column(s) or some rows from a pandas dataframe. One typically deletes columns/rows, if they are not needed for further analysis. There are a couple of ways you can achieve this, but the best way to do this in Pandas is to use \",/*#__PURE__*/ _jsx(\"code\",{children:\".drop()\"}),\" method.\"]}),/*#__PURE__*/ _jsx(\"h2\",{children:\".drop()\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"The \",/*#__PURE__*/ _jsx(\"code\",{children:\".drop()\"}),/*#__PURE__*/ _jsx(\"strong\",{children:\" \"}),\"function allows you to delete/drop/remove one or more columns from a dataframe. It also can be used to delete rows from Pandas dataframe.\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsxs(\"code\",{children:[\"DataFrame.\",/*#__PURE__*/ _jsx(\"strong\",{children:\"drop\"}),\"(\",/*#__PURE__*/ _jsx(\"em\",{children:\"self\"}),\", \",/*#__PURE__*/ _jsx(\"em\",{children:\"labels=None\"}),\", \",/*#__PURE__*/ _jsx(\"em\",{children:\"axis=0\"}),\", \",/*#__PURE__*/ _jsx(\"em\",{children:\"index=None\"}),\", \",/*#__PURE__*/ _jsx(\"em\",{children:\"columns=None\"}),\", \",/*#__PURE__*/ _jsx(\"em\",{children:\"level=None\"}),\", \",/*#__PURE__*/ _jsx(\"em\",{children:\"inplace=False\"}),\", \",/*#__PURE__*/ _jsx(\"em\",{children:\"errors='raise'\"}),\")\"]})}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"As you can see above, \",/*#__PURE__*/ _jsx(\"code\",{children:\".drop()\"}),\" function has multiple parameters. So to use the function correctly, we need to understand what these parameters do.\"]}),/*#__PURE__*/ _jsx(\"h3\",{children:\"Parameters:\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Self\"}),\" - Specifies what to drop.\"]}),/*#__PURE__*/ _jsx(\"p\",{children:\"Next come the optional parameters:\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Labels\"}),\" - Index or column labels to drop. \\xa0 \\xa0 \\xa0\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Axis\"}),\" - Whether to drop labels from the index (0 or 'index') or \\xa0columns (1 or 'columns'). \\xa0 \\xa0 \\xa0 \\xa0\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Index\"}),\" - Alternative to specifying axis.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Columns\"}),\" - Alternative to specifying axis.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Level\"}),\" - For MultiIndex, the level from which the labels will be removed. \\xa0\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Inplace\"}),\" - If True, drops specified from the DataFrame. If False, shows how DataFrame would look like without specified data.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Errors\"}),\" - If \u2018ignore\u2019, suppress error and only existing labels are dropped.\"]}),/*#__PURE__*/ _jsx(\"p\",{children:\"Optional parametrers have the following default behaviour:\"}),/*#__PURE__*/ _jsx(\"p\",{children:'labels=None, \\xa0 \\xa0 \\xa0 \\xa0axis=0, \\xa0 \\xa0 \\xa0 \\xa0index=None, \\xa0 \\xa0 \\xa0 \\xa0columns=None, \\xa0 \\xa0 \\xa0 \\xa0level=None, \\xa0 \\xa0 \\xa0 \\xa0inplace=False, \\xa0 \\xa0 \\xa0 \\xa0errors=\"raise\"'}),/*#__PURE__*/ _jsx(\"h2\",{children:\".drop() examples for dropping a column/columns\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Let us see some examples of dropping or removing columns from pandas dataframe.\"}),/*#__PURE__*/ _jsx(\"h3\",{children:\"Create dataframe\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Create a simple dataframe with \\xa0a dictionary of lists, and column names: \",/*#__PURE__*/ _jsx(\"strong\",{children:\"name, year, orders, town\"}),\".\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"data = {'name': ['Jon', 'Mia', 'Tony', 'Ted', 'Maria'], 'year': [2012, 2018, 2017, 2014, 2019], 'orders': [15, 20, 27, 9, 3], 'town': ['London', 'Birmingham', 'Manchester', 'Glasgow', 'Newcastle']} df = pd.DataFrame(data) df\"})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,W5CMrOwav5HQSpe36feK7B77Urs.png\",\"data-framer-height\":\"352\",\"data-framer-width\":\"486\",height:\"176\",src:new URL(\"assets/W5CMrOwav5HQSpe36feK7B77Urs.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"486 / 352\"},width:\"243\"}),/*#__PURE__*/ _jsxs(\"h3\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Example #1 : \"}),\"Delete a single column \",/*#__PURE__*/ _jsx(\"strong\",{children:\"using just the column name\"})]}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Pandas provides data analysts with a way to delete and filter dataframe using \",/*#__PURE__*/ _jsx(\"code\",{children:\".drop()\"}),\" method. Columns can be removed permanently using column name using this method \",/*#__PURE__*/ _jsx(\"code\",{children:\"df.drop(['your_column_name'], axis=1, inplace=True)\"}),\".\"]}),/*#__PURE__*/ _jsx(\"p\",{children:\"To drop a single column from pandas dataframe, we need to provide the name of the column to be removed as a list as an argument to drop function. \\xa0\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Remember parameter \",/*#__PURE__*/ _jsx(\"em\",{children:\"self?\"}),\" Pandas \",/*#__PURE__*/ _jsx(\"code\",{children:\".drop()\"}),\" function can drop column or row. This behaviour is controlled by the \",/*#__PURE__*/ _jsx(\"em\",{children:\"axis\"}),\" parameter. To specify that we want to drop a column, we need to provide \",/*#__PURE__*/ _jsx(\"code\",{children:\"axis=1\"}),\" as an argument to the drop function. If you don't provide \",/*#__PURE__*/ _jsx(\"code\",{children:\"axis=1\"}),\" then the \",/*#__PURE__*/ _jsx(\"code\",{children:\".drop()\"}),\" function will default to \",/*#__PURE__*/ _jsx(\"code\",{children:\"axis=0\"}),\". This means that the function will remove rows and not columns.\"]}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,K2h8tKXwLhGdh05JqslPX3jC4k.png\",\"data-framer-height\":\"372\",\"data-framer-width\":\"718\",height:\"186\",src:new URL(\"assets/K2h8tKXwLhGdh05JqslPX3jC4k.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"718 / 372\"},width:\"359\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df.drop(['your_column_name'], axis=1)\"})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,pdvj3ZbI9dIK2Nwi0ul182oLbA.png\",\"data-framer-height\":\"476\",\"data-framer-width\":\"720\",height:\"238\",src:new URL(\"assets/pdvj3ZbI9dIK2Nwi0ul182oLbA.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"720 / 476\"},width:\"360\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Don't get caught by the default behaviour of the \",/*#__PURE__*/ _jsx(\"em\",{children:\"inplace \"}),\"parameter\",/*#__PURE__*/ _jsx(\"em\",{children:\". \"}),\"After you run \",/*#__PURE__*/ _jsx(\"code\",{children:\"df.drop(['year'], axis=1)\"}),\" the actual dataframe remains unchanged. So if you call you dataframe again, it will still display a column that was specified as \",/*#__PURE__*/ _jsx(\"em\",{children:\"self in \"}),/*#__PURE__*/ _jsx(\"code\",{children:/*#__PURE__*/ _jsx(\"em\",{children:\".drop()\"})}),/*#__PURE__*/ _jsx(\"em\",{children:\" \"}),\"function. To remove a column permanently from your dataframe you will need to provide one more parameter \",/*#__PURE__*/ _jsx(\"code\",{children:\"inplace=True\"}),\".\"]}),/*#__PURE__*/ _jsx(\"p\",{children:\"Your command should look like the following:\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:\"df.drop(['your_column_name'], axis=1, inplace=True)\"}),\" or\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df.drop(columns=['your_column_name'], axis=1, inplace=True)\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"Its better to add labels when specifying parameters. Doing so will make reading your code easier.\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,U4qEXu1ovzLpBLrVuslqqSH79T8.png\",\"data-framer-height\":\"558\",\"data-framer-width\":\"820\",height:\"279\",src:new URL(\"assets/U4qEXu1ovzLpBLrVuslqqSH79T8.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"820 / 558\"},width:\"410\"}),/*#__PURE__*/ _jsxs(\"h3\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Example #2 : \"}),\"Remove a column with column index\"]}),/*#__PURE__*/ _jsx(\"p\",{children:\"It is also possible to drop a column using its index rather than its name. IMHO it is harder to read code when the index is used.\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df.drop(df.columns[[index_column]], axis = 1, inplace = True)\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"In our example, we are deleting column year, which has index one. It is the second column in the dataframe. Don't forget that python indexing starts from zero.\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,pcqWp7bTRq8FE44GgtqjAOwwEX0.png\",\"data-framer-height\":\"606\",\"data-framer-width\":\"878\",height:\"303\",src:new URL(\"assets/pcqWp7bTRq8FE44GgtqjAOwwEX0.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"878 / 606\"},width:\"439\"}),/*#__PURE__*/ _jsxs(\"h3\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Example #3 : \"}),\"Delete multiple columns using the \",/*#__PURE__*/ _jsx(\"strong\",{children:\"column name\"})]}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Pandas \",/*#__PURE__*/ _jsx(\"code\",{children:\".drop()\"}),\" function can also be used to remove multiple columns. To do so, one simply needs to provide names of columns that should be deleted. Here is an example of dropping two columns from our simple dataframe.\"]}),/*#__PURE__*/ _jsx(\"p\",{children:\"Your command should look like:\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:\"df.drop(['your_column1', 'your_column2'], axis=1, inplace = True)\"}),\" or\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df.drop(columns=['your_column1', 'your_column2'], axis=1, inplace = True)\"})}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Dataframe before \",/*#__PURE__*/ _jsx(\"code\",{children:\".drop()\"}),\" is used:\"]}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,1E1tHQbeY1phs41O9hXNxaxdzA.png\",\"data-framer-height\":\"374\",\"data-framer-width\":\"874\",height:\"187\",src:new URL(\"assets/1E1tHQbeY1phs41O9hXNxaxdzA.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"874 / 374\"},width:\"437\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Dataframe after \",/*#__PURE__*/ _jsx(\"code\",{children:\".drop()\"}),\" is used:\"]}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,5GkxUzNUxIoyJEMqABzUW3FU6Y.png\",\"data-framer-height\":\"570\",\"data-framer-width\":\"900\",height:\"285\",src:new URL(\"assets/5GkxUzNUxIoyJEMqABzUW3FU6Y.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"900 / 570\"},width:\"450\"}),/*#__PURE__*/ _jsxs(\"h3\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Example #4 : \"}),\"Delete multiple columns using the column index\"]}),/*#__PURE__*/ _jsx(\"p\",{children:\"You can also delete multiple columns with column index using the command:\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df.drop(df.columns[[index_column1, index_column2]], axis=1, inplace = True)\"})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,PTqnLCRdmEsSqVZMZoNBNVkDg.png\",\"data-framer-height\":\"848\",\"data-framer-width\":\"910\",height:\"424\",src:new URL(\"assets/PTqnLCRdmEsSqVZMZoNBNVkDg.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"910 / 848\"},width:\"455\"}),/*#__PURE__*/ _jsx(\"h2\",{children:\".drop() examples for dropping a row(s)\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"In Pandas, it is also easy to drop rows of a dataframe. We can use the same \",/*#__PURE__*/ _jsx(\"code\",{children:\".drop()\"}),/*#__PURE__*/ _jsx(\"strong\",{children:\" \"}),\"function to delete rows.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"To drop one or more rows from a Pandas dataframe, we need to specify the row index(s) that need to be dropped and \",/*#__PURE__*/ _jsx(\"code\",{children:\"axis=0\"}),\" argument. Here the \",/*#__PURE__*/ _jsx(\"code\",{children:\"axis=0\"}),\" argument specifies that we want to drop rows instead of dropping columns. Remember that this is the default parameter for the \",/*#__PURE__*/ _jsx(\"code\",{children:\".drop()\"}),\" function and so it is optional.\"]}),/*#__PURE__*/ _jsxs(\"h3\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Example #1 : \"}),\"Delete row with its index\"]}),/*#__PURE__*/ _jsx(\"p\",{children:\"To delete a specific row from a dataframe with its index use the following command:\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:\"df.drop([row_index], axis=0, inplace = True)\"}),\" or\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df.drop([row_index], inplace = True)\"})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,DD6p5PYs2xAGBSeZ4GUPdOnUQ84.png\",\"data-framer-height\":\"808\",\"data-framer-width\":\"888\",height:\"404\",src:new URL(\"assets/DD6p5PYs2xAGBSeZ4GUPdOnUQ84.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"888 / 808\"},width:\"444\"}),/*#__PURE__*/ _jsxs(\"h3\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Example #2 : \"}),\"Delete row with its custom index\"]}),/*#__PURE__*/ _jsx(\"p\",{children:\"You can also set custom indexes on your dataframe. In this case, to drop the specified row, you will need to use its custom Intex.\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Use one of the following commands:\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:\"df.drop(index='custom_index', axis=0, inplace = True)\"}),\" or\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:\"df.drop('custom_index', axis=0, inplace = True)\"}),\" or\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:\"df.drop('custom_index', inplace = True)\"}),\" or\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df.drop(['custom_index'], inplace = True)\"})}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"data = {'name': ['Jon', 'Mia', 'Tony', 'Ted', 'Maria'], 'year': [2012, 2018, 2017, 2014, 2019], 'orders': [7, 20, 27, 9, 3]} df = pd.DataFrame(data, index = ['London', 'Birmingham', 'Manchester', 'Glasgow', 'Newcastle']) df\"})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,0xorDgLr50mrsVsbeLeCToQcs.png\",\"data-framer-height\":\"364\",\"data-framer-width\":\"740\",height:\"182\",src:new URL(\"assets/0xorDgLr50mrsVsbeLeCToQcs.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"740 / 364\"},width:\"370\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"In the above dataframe towns serve as indexes.\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Let's delete a row with custom index Glasgow.\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,BitcRSh2B9IpkeTZMToLtuSINc0.png\",\"data-framer-height\":\"784\",\"data-framer-width\":\"852\",height:\"392\",src:new URL(\"assets/BitcRSh2B9IpkeTZMToLtuSINc0.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"852 / 784\"},width:\"426\"}),/*#__PURE__*/ _jsx(\"h2\",{children:\"Conclusion\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Now you should have a better understanding of what the \",/*#__PURE__*/ _jsx(\"code\",{children:\".drop()\"}),\" function does and be able to use it in order to drop/delete/remove rows/columns from your dataframe. There are many other ways of dropping rows/columns from a dataframe, but they are out of the scope of this article.\"]})]}),qmKEIZQOx:\"rgb(0, 153, 255)\",V8PWfbvT8:\"delete-drop-column-from-pandas-dataframe\",vny2uxJff:{alt:\"\",src:new URL(\"assets/EyNWmmnjmVjEbQOxUXgeLizz1E.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,srcSet:`${new URL(\"assets/512/EyNWmmnjmVjEbQOxUXgeLizz1E.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 512w, ${new URL(\"assets/1024/EyNWmmnjmVjEbQOxUXgeLizz1E.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 1024w, ${new URL(\"assets/EyNWmmnjmVjEbQOxUXgeLizz1E.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 2000w`},ZckEhR3V3:\"Delete column/row from a Pandas dataframe using .drop() method\"},{Djh5_J2Mt:\"Guides\",id:\"fdUHTUUb0\",iP8mvmvMM:\"2019-11-15T00:00:00.000Z\",KbGlbG3Yd:/*#__PURE__*/ _jsxs(React.Fragment,{children:[/*#__PURE__*/ _jsx(\"p\",{children:\"Data Visualization is a big part of data analysis and data science. In a nutshell data visualization is a way to show complex data in a form that is graphical and easy to understand. This can be especially useful when trying to explore the data and get acquainted with it. \\xa0Visuals such as plots and graphs can be very effective in \\xa0clearly explaining data to various audiences. Here is a beginners guide to data visualisation using Matplotlib from a Pandas dataframe.\"}),/*#__PURE__*/ _jsx(\"h3\",{children:\"Fundamental design principals\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"All great visuals follow three key principles: less is more, attract attention, and have impact. In other words, any feature or design you include in your plot to make it more attractive or pleasing should support the message that the plot is meant to get across and not distract from it.\"}),/*#__PURE__*/ _jsx(\"h3\",{children:\"Matplotlib and its architecture\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Let's learn first about Matplotlib and its architecture. Matplotlib is one of the most widely used, if not the most popular data visualization libraries in Python. Matplotlib tries to make basic things easy and hard things possible. You can generate plots, histograms, box plots, bar charts, line plots, scatterplots, etc., with just a few lines of code. Keep reading to see code examples.\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Matplotlib's architecture is composed of three main layers: the back-end layer, the artist layer where much of the heavy lifting happens, and the scripting layer. The scripting layer is considered a lighter interface to simplify common tasks and for quick and easy generation of graphics and plots.\"}),/*#__PURE__*/ _jsx(\"h3\",{children:\"Import Matplotlib and Numpy.\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"First import Matplotlib and Matplotlib's pyplot. Note that you need to have Numpy installed for Matplotlib to work. If you work in Jupiter Notebooks you will need to write \",/*#__PURE__*/ _jsx(\"code\",{children:\"%matplotlib inline\"}),\" for your matplotlib graphs to be included in your notebook, next to the code.\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"import pandas as pd import numpy as np\"})}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"%matplotlib inline import numpy as np import matplotlib as mpl import matplotlib.pyplot as plt mpl.style.use('ggplot')\"})}),/*#__PURE__*/ _jsx(\"h3\",{children:\"The Pandas Plot Function\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Pandas has a built in \",/*#__PURE__*/ _jsx(\"code\",{children:\".plot()\"}),\" function as part of the DataFrame class. In order to use it comfortably you will need to know several key parameters:\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"kind\"}),\" \u2014 \\xa0Type of plot that you require. \u2018bar\u2019,\u2019barh\u2019,\u2019pie\u2019,\u2019scatter\u2019,\u2019kde\u2019 etc .\",/*#__PURE__*/ _jsx(\"br\",{}),/*#__PURE__*/ _jsx(\"strong\",{children:\"color\"}),\" \u2014 Sets color. It accepts an array of hex codes corresponding to each data series / column.\",/*#__PURE__*/ _jsx(\"br\",{}),/*#__PURE__*/ _jsx(\"strong\",{children:\"linestyle\"}),\" \u2014 Allows to select line style. \\xa0\u2018solid\u2019, \u2018dotted\u2019, \u2018dashed\u2019 (applies to line graphs only)\",/*#__PURE__*/ _jsx(\"br\",{}),/*#__PURE__*/ _jsx(\"strong\",{children:\"x\"}),\" \\xa0\u2014 \\xa0label or position, default: None.\",/*#__PURE__*/ _jsx(\"br\",{}),/*#__PURE__*/ _jsx(\"strong\",{children:\"y\"}),\" \\xa0\u2014 \\xa0label, position or list of label, positions, default None. Allows plotting of one column against another.\",/*#__PURE__*/ _jsx(\"br\",{}),/*#__PURE__*/ _jsx(\"strong\",{children:\"legend\"}),\"\u2014 a boolean value to display or hide the legend\",/*#__PURE__*/ _jsx(\"br\",{}),/*#__PURE__*/ _jsx(\"strong\",{children:\"title\"}),\" \u2014 The string title of the plot\"]}),/*#__PURE__*/ _jsx(\"p\",{children:\"These are fairly straightforward to use and we\u2019ll do some examples using .plot() later in the post.\"}),/*#__PURE__*/ _jsx(\"h3\",{children:\"Line plots in Pandas with Matplotlib\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"A line plot is a type of plot which displays information as a series of data points called 'markers' connected by straight line segments. It is a basic type of chart common in many fields. Use line plots when you have continuous data sets. These are best suited for trend-based visualizations of data over a period of time.\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"# Sample data for examples # Manually creating a dataframe # Source: https://en.wikipedia.org/wiki/Demography_of_the_United_Kingdom df = pd.DataFrame({ 'Year':['1958','1963','1968','1973','1978','1983','1988', '1993', '1998', '2003', '2008', '2013', '2018'], 'Average population':[51652500, 53624900, 55213500, 56223000, 56178000, 56315000, 56916000, 57713000, 58474000, 59636000, 61823000, 64105000, 66436000] })\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"Sample df for the line plot\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,ISr3eGtJ4knzQ89x193ow5Dm7r8.png\",\"data-framer-height\":\"1230\",\"data-framer-width\":\"1642\",height:\"615\",src:new URL(\"assets/ISr3eGtJ4knzQ89x193ow5Dm7r8.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1642 / 1230\"},width:\"821\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"The \",/*#__PURE__*/ _jsx(\"code\",{children:\"df.plot()\"}),\" or \",/*#__PURE__*/ _jsx(\"code\",{children:\"df.plot(kind = 'line')\"}),\" commands create a line graph, and the parameters passed in tell the function what data to use. While you don't need to pass in parameter \",/*#__PURE__*/ _jsx(\"code\",{children:\"kind = 'line'\"}),\" in the command to get a line plot it is better to add it for the sake of clarity. \\xa0\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"The first parameter, \",/*#__PURE__*/ _jsx(\"em\",{children:\"year\"}),\", will be plotted on the x-axis, and the second parameter, \",/*#__PURE__*/ _jsx(\"em\",{children:\"average population\"}),\", will be plotted on the y-axis.\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df.plot(x = 'Year', y = 'Average population', kind='line')\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"If you want to have a title and labels for your graph you will need to specify them separately.\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"plt.title('text') plt.ylabel('text') plt.xlabel('text')\"})}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Calling \",/*#__PURE__*/ _jsx(\"code\",{children:\"plt.show()\"}),\" is required for your graph to be printed on screen. If you use Jupiter Notebooks and you already run line \",/*#__PURE__*/ _jsx(\"code\",{children:\"%matplotlib inline\"}),\" your graph will show even without you running \",/*#__PURE__*/ _jsx(\"code\",{children:\"plt.show()\"}),\" but, it will print an unwanted text message as well. This is why it is better to run \",/*#__PURE__*/ _jsx(\"code\",{children:\"plt.show()\"}),\" regardless of the environment. When run, the output will be as follows:\"]}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,DhFwi5vBB6JAGDpw3qpQvFeNSNE.png\",\"data-framer-height\":\"848\",\"data-framer-width\":\"1028\",height:\"424\",src:new URL(\"assets/DhFwi5vBB6JAGDpw3qpQvFeNSNE.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1028 / 848\"},width:\"514\"}),/*#__PURE__*/ _jsx(\"h3\",{children:\"Bar charts in Pandas with Matplotlib\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"A bar plot is a way of representing data where the length of the bars represents the magnitude/size of the feature/variable. Bar graphs usually represent numerical and categorical variables grouped in intervals.\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Bar plots are most effective when you are trying to visualize categorical data that has few categories. If we have too many categories then the bars will be very cluttered in the figure and hard to understand. They\u2019re nice for categorical data because you can easily see the difference between the categories based on the size of the bar.\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Now lets create a dataframe for our bar chart.\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"# Sample dataframe # Source: # https://en.wikipedia.org/wiki/List_of_countries_by_GDP_(PPP)_per_capita # From table International Monetary Fund (2018) # All figures are in current Geary\u2013Khamis dollars (also known as international dollars) Data = {'Country': ['United States','Singapore','Germany','United Kingdom','Japan'], 'GDP_Per_Capita': [62606,100345,52559,45705,44227] } df = pd.DataFrame(Data,columns=['Country','GDP_Per_Capita'])\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"Sample df for the bar chart\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,Smq2C9O754j7KcPHBEn4M1Owg.png\",\"data-framer-height\":\"842\",\"data-framer-width\":\"1556\",height:\"421\",src:new URL(\"assets/Smq2C9O754j7KcPHBEn4M1Owg.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1556 / 842\"},width:\"778\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"How the dataframe looks\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"To create a bar plot we will use \",/*#__PURE__*/ _jsx(\"code\",{children:\"df.plot()\"}),\" again. This time we can pass one of two arguments via \",/*#__PURE__*/ _jsx(\"code\",{children:\"kind\"}),\" parameter in \",/*#__PURE__*/ _jsx(\"code\",{children:\"plot()\"}),\":\"]}),/*#__PURE__*/ _jsxs(\"ul\",{style:{\"--framer-font-size\":\"22px\",\"--framer-text-alignment\":\"start\",\"--framer-text-color\":\"rgb(60, 72, 78)\",\"--framer-text-transform\":\"none\"},children:[/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:\"kind=bar\"}),\" creates a \",/*#__PURE__*/ _jsx(\"em\",{children:\"vertical\"}),\" bar plot\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:\"kind=barh\"}),\" creates a \",/*#__PURE__*/ _jsx(\"em\",{children:\"horizontal\"}),\" bar plot\"]})})]}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Simmilarly \",/*#__PURE__*/ _jsx(\"code\",{children:\"df.plot()\"}),\" command for bar chart will require three parameters: x values, y values and type of plot.\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df.plot(x ='Country', y='GDP_Per_Capita', kind = 'bar') plt.title('GDP Per Capita in international dollars') plt.ylabel('GDP Per Capita') plt.xlabel('Country') plt.show()\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"Bar chart\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,V5kDruVk6E8SoPQWEKIGZT5ca2k.png\",\"data-framer-height\":\"1010\",\"data-framer-width\":\"1166\",height:\"505\",src:new URL(\"assets/V5kDruVk6E8SoPQWEKIGZT5ca2k.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1166 / 1010\"},width:\"583\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Sometimes it is more practical to represent the data horizontally, especially if you need more room for labelling the bars. In horizontal bar graphs, the y-axis is used for labelling, and the length of bars on the x-axis corresponds to the magnitude of the variable being measured. As you will see, there is more room on the y-axis to label categetorical variables.\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"To get a horizontal bar chart you will need to change a \",/*#__PURE__*/ _jsx(\"code\",{children:\"kind\"}),\" parameter in \",/*#__PURE__*/ _jsx(\"code\",{children:\"plot()\"}),\" to \",/*#__PURE__*/ _jsx(\"code\",{children:\"barh\"}),\". You will also need to enter correct x and y labels as they are now switched compare to the standart bar chart.\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df.plot(x ='Country', y='GDP_Per_Capita', kind = 'barh') plt.title('GDP Per Capita in international dollars') plt.ylabel(' Country') plt.xlabel('GDP Per Capita') plt.show()\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"Horizontal bar chart\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,XiFQhbyhdayn4ujXTrDZnkvAZs.png\",\"data-framer-height\":\"858\",\"data-framer-width\":\"1126\",height:\"429\",src:new URL(\"assets/XiFQhbyhdayn4ujXTrDZnkvAZs.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1126 / 858\"},width:\"563\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"The \",/*#__PURE__*/ _jsx(\"code\",{children:\"df.plot()\"}),\" command allows for significant customisation. If you want to change the color of your graph you can pass in the \\xa0\",/*#__PURE__*/ _jsx(\"code\",{children:\"color\"}),\" parameter in your \",/*#__PURE__*/ _jsx(\"code\",{children:\"plot()\"}),\" command. You can also remove the legend by passing \",/*#__PURE__*/ _jsx(\"code\",{children:\"legend = False\"}),\" and adding a title using \",/*#__PURE__*/ _jsx(\"code\",{children:\"title = 'Your Title'\"}),\".\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df.plot(x = 'Country', y = 'GDP_Per_Capita', kind = 'barh', color = 'blue', title = 'GDP Per Capita in international dollars', legend = False) plt.show()\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"Horizontal bar chart in blue\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,kYj11rX8OlNhWwm3yC90yPTyiUA.png\",\"data-framer-height\":\"702\",\"data-framer-width\":\"1346\",height:\"351\",src:new URL(\"assets/kYj11rX8OlNhWwm3yC90yPTyiUA.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1346 / 702\"},width:\"673\"}),/*#__PURE__*/ _jsx(\"h3\",{children:\"Scatter plots in Pandas with Matplotlib\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Scatterplots are a great way to visualize a relationship between two variables without the potential for getting a misleading trend line from a line graph. Just like with the above graphs, creating a scatterplot in Pandas with Matplotlib only requires a few lines of code, as shown below.\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Let's start by creating a dataframe for the scatter plot.\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"# Sample dataframe # Source: # https://ourworldindata.org/grapher/life-expectancy-vs-gdp-per-capita # Data for the 2015 Data = {'Country': ['United States','Singapore','Germany', 'United Kingdom','Japan'], 'GDP_Per_Capita': [52591,67110,46426,38749,36030], 'Life_Expectancy': [79.24, 82.84, 80.84, 81.40, 83.62] } df = pd.DataFrame(Data,columns=['Country','GDP_Per_Capita','Life_Expectancy'])\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"Sample df for Scatter plot\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,9MTX79nBivY98IgvrYs72s8IpeQ.png\",\"data-framer-height\":\"838\",\"data-framer-width\":\"1510\",height:\"419\",src:new URL(\"assets/9MTX79nBivY98IgvrYs72s8IpeQ.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1510 / 838\"},width:\"755\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"How the df for Scatter plot looks like\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Now that you understand how the \",/*#__PURE__*/ _jsx(\"code\",{children:\"df.plot()\"}),\" command works, creating scatterplots is really easy. All you need to do is change the \",/*#__PURE__*/ _jsx(\"code\",{children:\"kind\"}),\" parameter to \",/*#__PURE__*/ _jsx(\"code\",{children:\"scatter\"}),\".\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df.plot(kind='scatter',x='GDP_Per_Capita',y='Life_Expectancy',color='red') plt.title('GDP Per Capita and Life Expectancy') plt.ylabel('Life Expectancy') plt.xlabel('GDP Per Capita') plt.show()\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"Scatter plot\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,jnjqFWHsPXrRrLNpIVk8I7Wj5M.png\",\"data-framer-height\":\"860\",\"data-framer-width\":\"1374\",height:\"430\",src:new URL(\"assets/jnjqFWHsPXrRrLNpIVk8I7Wj5M.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1374 / 860\"},width:\"687\"}),/*#__PURE__*/ _jsx(\"h3\",{children:\"Pie charts in Pandas with Matplotlib\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"A pie chart is a circular graphic that displays numeric proportions by dividing a circle into proportional slices. You are most likely already familiar with pie charts as they are widely used.\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Let's use a pie chart to explore the proportion (percentage) of the population split by continents.\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"# sample dataframe for pie chart # source: # https://en.wikipedia.org/wiki/List_of_continents_by_population df = pd.DataFrame({'population': [422535000, 38304000 , 579024000, 738849000, 4581757408, 1106, 1216130000]}, index=['South America', 'Oceania', 'North America', 'Europe', 'Asia', 'Antarctica', 'Africa'])\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"Sample df for Pie chart\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,Sp4GouJf5s16oTik1fcx0krhGU.png\",\"data-framer-height\":\"872\",\"data-framer-width\":\"1332\",height:\"436\",src:new URL(\"assets/Sp4GouJf5s16oTik1fcx0krhGU.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1332 / 872\"},width:\"666\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"How df for Pie chart looks like\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"We can create pie charts in Matplotlib by passing in the \",/*#__PURE__*/ _jsx(\"code\",{children:\"kind=pie\"}),\" keyword in \",/*#__PURE__*/ _jsx(\"code\",{children:\"df.plot()\"}),\" .\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df.plot(kind = 'pie', y='population', figsize=(10, 10)) plt.title('Population by Continent') plt.show()\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"Pie Chart\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,50hGgPKSLgyDAN00qXdmdOSJGHM.png\",\"data-framer-height\":\"1288\",\"data-framer-width\":\"1312\",height:\"644\",src:new URL(\"assets/50hGgPKSLgyDAN00qXdmdOSJGHM.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1312 / 1288\"},width:\"656\"}),/*#__PURE__*/ _jsx(\"h3\",{children:\"Box plots in Pandas with Matplotlib\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"A box plot is a way of statistically representing the distribution of the data through five main dimensions:\"}),/*#__PURE__*/ _jsxs(\"ul\",{style:{\"--framer-font-size\":\"22px\",\"--framer-text-alignment\":\"start\",\"--framer-text-color\":\"rgb(60, 72, 78)\",\"--framer-text-transform\":\"none\"},children:[/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Minimun:\"}),\" The smallest number in the dataset.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"First quartile:\"}),\" The middle number between the minimum and the median.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Second quartile (Median):\"}),\" The middle number of the (sorted) dataset.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Third quartile:\"}),\" The middle number between median and maximum.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Maximum:\"}),\" The highest number in the dataset.\"]})})]}),/*#__PURE__*/ _jsx(\"p\",{children:\"For the box plot, we can use the same dataframe that we used earlier for the bar chart.\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"# Sample dataframe # Source: # https://en.wikipedia.org/wiki/List_of_countries_by_GDP_(PPP)_per_capita # From table International Monetary Fund (2018) # All figures are in current Geary\u2013Khamis dollars (also known as international dollars) Data = {'Country': ['United States','Singapore','Germany', 'United Kingdom','Japan'], 'GDP_Per_Capita': [62606,100345,52559,45705,44227] } df = pd.DataFrame(Data,columns=['Country','GDP_Per_Capita'])\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"Sample df for box plot\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"To make a box plot, we can use the \",/*#__PURE__*/ _jsx(\"code\",{children:\"kind=box\"}),\" parameter in the \",/*#__PURE__*/ _jsx(\"code\",{children:\"plot()\"}),\" method invoked in a pandas series or dataframe.\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df.plot(kind='box', figsize=(8, 6)) plt.title('Box plot of GDP Per Capita') plt.ylabel('GDP Per Capita in dollars') plt.show()\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"Box plot\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,CL0akWRpDITnPQfdfOf1VQ7Ahk4.png\",\"data-framer-height\":\"1024\",\"data-framer-width\":\"1290\",height:\"512\",src:new URL(\"assets/CL0akWRpDITnPQfdfOf1VQ7Ahk4.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1290 / 1024\"},width:\"645\"}),/*#__PURE__*/ _jsx(\"h2\",{children:\"Conclusion\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"We just learned 5 quick and easy data visualisations using Pandas with Matplotlib. I hope you enjoyed this post and learned something new and useful. If you want to learn more about data visualisations using Pandas with Matplotlib check out \",/*#__PURE__*/ _jsx(Link,{href:\"https://pandas.pydata.org/pandas-docs/version/0.23.4/generated/pandas.DataFrame.plot.html\",openInNewTab:false,smoothScroll:false,children:/*#__PURE__*/ _jsx(\"a\",{children:\"Pandas.DataFrame.plot documentation\"})}),\". \\xa0\"]})]}),qmKEIZQOx:\"rgb(0, 153, 255)\",V8PWfbvT8:\"how-to-visualise-data-with-python\",vny2uxJff:{alt:\"\",src:new URL(\"assets/m4culCebJ2PQsnH60KbrHEtHoJc.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,srcSet:`${new URL(\"assets/512/m4culCebJ2PQsnH60KbrHEtHoJc.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 512w, ${new URL(\"assets/1024/m4culCebJ2PQsnH60KbrHEtHoJc.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 1024w, ${new URL(\"assets/m4culCebJ2PQsnH60KbrHEtHoJc.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 2000w`},ZckEhR3V3:\"How to visualize data with Matplotlib from a Pandas Dataframe\"},{Djh5_J2Mt:\"Guides\",id:\"y7PkPzWjs\",iP8mvmvMM:\"2019-08-08T00:00:00.000Z\",KbGlbG3Yd:/*#__PURE__*/ _jsxs(React.Fragment,{children:[/*#__PURE__*/ _jsx(\"p\",{children:\"When should you use group by in general? I would say group by is a good idea any time you want to analyse some pandas series by some category. \\xa0Group by in Python Pandas essentially splits the data into different groups depending on a variable/category of your choice. For example, the expression data.groupby(\u2018year\u2019) will split our current DataFrame by year.\"}),/*#__PURE__*/ _jsx(\"h3\",{children:\"GroupBy object\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"The groupby() function returns a GroupBy object but essentially describes how the rows of the original dataset have been split. The GroupBy object groups variable is a dictionary whose keys are the computed unique groups and corresponding values being the axis labels belonging to each group. Let's have a closer look.\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,wjFkugvVpuqRBBJlHNqRjlRZk.png\",\"data-framer-height\":\"962\",\"data-framer-width\":\"2032\",height:\"481\",src:new URL(\"assets/wjFkugvVpuqRBBJlHNqRjlRZk.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"2032 / 962\"},width:\"1016\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"If you simply run \",/*#__PURE__*/ _jsx(\"code\",{children:\"df.groupby('column_for_grouping')\"}),\" you will get a Python object that will look similar to \",/*#__PURE__*/ _jsx(\"code\",{children:\"<pandas.core.groupby.generic.DataFrameGroupBy object at 0x7fd69e143208>\"}),\". You may want to know how DataFrameGroupBy object looks internally. So lets print groups split by continent within our DataFrameGroupBy object by iterating through groups.\"]}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,t1fTBpFCPFspJyndnbGAROS2iVM.png\",\"data-framer-height\":\"1136\",\"data-framer-width\":\"2040\",height:\"568\",src:new URL(\"assets/t1fTBpFCPFspJyndnbGAROS2iVM.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"2040 / 1136\"},width:\"1020\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Now you can see that we have a continent as a key and a DataFrame corresponding to each continent as a value.\"}),/*#__PURE__*/ _jsx(\"h3\",{children:\"Get_group()\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"You also can access a specific Dataframe from DataFrameGroupBy object using \",/*#__PURE__*/ _jsx(\"code\",{children:\"get_group()\"}),\".\"]}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,VAW1PVtH7szZCcpR2KvthnZouc.png\",\"data-framer-height\":\"446\",\"data-framer-width\":\"2026\",height:\"223\",src:new URL(\"assets/VAW1PVtH7szZCcpR2KvthnZouc.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"2026 / 446\"},width:\"1013\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"In the example above we got DataFrame that corresponds to Europe by running \",/*#__PURE__*/ _jsx(\"code\",{children:\"g.get_group('Europe')\"}),\". Note that I used \",/*#__PURE__*/ _jsx(\"code\",{children:\".head()\"}),\" in order to shorten the list of countries.\"]}),/*#__PURE__*/ _jsx(\"h3\",{children:\"What Group By can do\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"\u201CGroup by\u201D is used in a process involving one or more of the following steps:\"}),/*#__PURE__*/ _jsxs(\"ul\",{style:{\"--framer-font-size\":\"22px\",\"--framer-text-alignment\":\"start\",\"--framer-text-color\":\"rgb(60, 72, 78)\",\"--framer-text-transform\":\"none\"},children:[/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Splitting\"}),\" the data into groups based on some criteria.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Applying\"}),\" a function to each group independently.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Combining\"}),\" the results into a data structure.\"]})})]}),/*#__PURE__*/ _jsx(\"p\",{children:\"Out of these, \\xa0the most straightforward step is the split. In fact, in many situations, we may wish to split the data set into groups and do something with those groups. In the apply step, following actions are the most common:\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Aggregation\"}),\": compute a summary statistic for each group.\"]}),/*#__PURE__*/ _jsx(\"p\",{children:\"Examples:\"}),/*#__PURE__*/ _jsxs(\"ul\",{style:{\"--framer-font-size\":\"22px\",\"--framer-text-alignment\":\"start\",\"--framer-text-color\":\"rgb(60, 72, 78)\",\"--framer-text-transform\":\"none\"},children:[/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:\"Compute group sums or means.\"})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:\"Compute group sizes / counts.\"})})]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Transformation\"}),\": perform some group-specific computations and return a like-indexed object.\"]}),/*#__PURE__*/ _jsx(\"p\",{children:\"Examples:\"}),/*#__PURE__*/ _jsxs(\"ul\",{style:{\"--framer-font-size\":\"22px\",\"--framer-text-alignment\":\"start\",\"--framer-text-color\":\"rgb(60, 72, 78)\",\"--framer-text-transform\":\"none\"},children:[/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:\"Standardize data within a group.\"})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:\"Filling NAs within groups with a value derived from each group.\"})})]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Filtration\"}),\": discard some groups, according to a group-wise computation that evaluates True or False.\"]}),/*#__PURE__*/ _jsx(\"p\",{children:\"Examples:\"}),/*#__PURE__*/ _jsxs(\"ul\",{style:{\"--framer-font-size\":\"22px\",\"--framer-text-alignment\":\"start\",\"--framer-text-color\":\"rgb(60, 72, 78)\",\"--framer-text-transform\":\"none\"},children:[/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:\"Discard data that belongs to groups with only a few members.\"})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsx(\"p\",{children:\"Filter out data based on the group sum or mean.\"})})]}),/*#__PURE__*/ _jsx(\"h3\",{children:\"GroupBY using multiple columns\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"On a DataFrame, we obtain a GroupBy object by calling \",/*#__PURE__*/ _jsx(\"code\",{children:/*#__PURE__*/ _jsx(Link,{href:\"https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.groupby.html#pandas.DataFrame.groupby\",openInNewTab:false,smoothScroll:false,children:/*#__PURE__*/ _jsx(\"a\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\"groupby()\"})})})}),\". We could naturally group by either one column of the DataFrame or multiple columns using \",/*#__PURE__*/ _jsx(\"code\",{children:\"df.groupby(['column1', 'column2']\"})]}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,f4bKlSm32kB1hOPeC9tQrfQrnH8.png\",\"data-framer-height\":\"1162\",\"data-framer-width\":\"2026\",height:\"581\",src:new URL(\"assets/f4bKlSm32kB1hOPeC9tQrfQrnH8.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"2026 / 1162\"},width:\"1013\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,l1RZDxAD0qwqjB2FE77c5iJyse4.png\",\"data-framer-height\":\"118\",\"data-framer-width\":\"2034\",height:\"59\",src:new URL(\"assets/l1RZDxAD0qwqjB2FE77c5iJyse4.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"2034 / 118\"},width:\"1017\"}),/*#__PURE__*/ _jsx(\"p\",{children:'Now we split the data into groups by job title and company and saved as a GroupBy object called \"group\".'}),/*#__PURE__*/ _jsx(\"h3\",{children:\"Similarity to SQL\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"If you are familiar to SQL GroupBy in Pandas would be no stranger to you. After all \",/*#__PURE__*/ _jsx(\"code\",{children:\"df.groupby('column_for_grouping')\"}),\" uses the same logic as \",/*#__PURE__*/ _jsx(\"code\",{children:\"SELECT * FROM city_data GROUP BY city;\"}),\" where city_data is a name of a table you are using for grouping by column city.\"]}),/*#__PURE__*/ _jsx(\"h3\",{children:\"Aggregation - Compute a summary statistic for each group\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Computing group sums or means is a very common thing in data analysis. So let's see how this can be done.\"}),/*#__PURE__*/ _jsx(\"p\",{children:'Now that we have DataFrameGroupBy object called \"g\" in order to get mean for the specific column you just need to add .your_column.mean().'}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"g.your_column.mean()\"})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,PCvCq5w2j70x5xbaiz9VQS2UZ3g.png\",\"data-framer-height\":\"860\",\"data-framer-width\":\"1638\",height:\"430\",src:new URL(\"assets/PCvCq5w2j70x5xbaiz9VQS2UZ3g.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1638 / 860\"},width:\"819\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Or if you want to see means for all columns you just need to run \",/*#__PURE__*/ _jsx(\"code\",{children:\"g.mean()\"})]}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,qdKMqT0BCFaXYKRf10fqldzI.png\",\"data-framer-height\":\"594\",\"data-framer-width\":\"1626\",height:\"297\",src:new URL(\"assets/qdKMqT0BCFaXYKRf10fqldzI.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1626 / 594\"},width:\"813\"}),/*#__PURE__*/ _jsx(\"p\",{children:'The same can be done with a GroupBy object \"group\" which we grouped by multiple values.'}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,kkykqDiBYEQGmVl2NaYYAjsq4Zo.png\",\"data-framer-height\":\"386\",\"data-framer-width\":\"2036\",height:\"193\",src:new URL(\"assets/kkykqDiBYEQGmVl2NaYYAjsq4Zo.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"2036 / 386\"},width:\"1018\"}),/*#__PURE__*/ _jsx(\"h3\",{children:\"Applying multiple functions at once .agg([])\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Often we need to calculate more than one function for the group. Doing this individually is time-consuming so this is why \",/*#__PURE__*/ _jsx(\"code\",{children:\".agg([])\"}),\" was created. \\xa0\"]}),/*#__PURE__*/ _jsx(\"p\",{children:\"With DataFrameGroupBy object you can also pass a list or dict of functions to do aggregation with, outputting a DataFrame:\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"g.agg(['count', 'min', 'max', 'mean'])\"})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,ZvRySuuuF24J9RbAiIMuYKJwg.png\",\"data-framer-height\":\"1142\",\"data-framer-width\":\"1630\",height:\"571\",src:new URL(\"assets/ZvRySuuuF24J9RbAiIMuYKJwg.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1630 / 1142\"},width:\"815\"}),/*#__PURE__*/ _jsx(\"h3\",{children:\"Group By function and .describe()\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"You can also use \",/*#__PURE__*/ _jsx(\"code\",{children:\".describe()\"}),\" with the Group By function, but in comparison to \",/*#__PURE__*/ _jsx(\"code\",{children:\".agg([])\"}),\" you can't manually assign wich summary functions to run.\"]}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,Q0w17ASZ4Orfy176DLDuxGuK4.png\",\"data-framer-height\":\"600\",\"data-framer-width\":\"1634\",height:\"300\",src:new URL(\"assets/Q0w17ASZ4Orfy176DLDuxGuK4.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1634 / 600\"},width:\"817\"}),/*#__PURE__*/ _jsx(\"h2\",{children:\"Conclusion\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Now you understand the basics the GroupBy functionality in Pandas. If you want to go deeper into the subject check out \",/*#__PURE__*/ _jsx(Link,{href:\"https://pandas.pydata.org/pandas-docs/stable/user_guide/groupby.html\",openInNewTab:false,smoothScroll:false,children:/*#__PURE__*/ _jsx(\"a\",{children:\"official Pandas documentation for the function\"})}),\". \\xa0\"]}),/*#__PURE__*/ _jsx(\"p\",{children:\"There are plenty of resources online explaining how to use GroupBy function, and I\u2019d recommend conquering this syntax if you\u2019re serious about using Pandas.\"})]}),qmKEIZQOx:\"rgb(0, 153, 255)\",V8PWfbvT8:\"group-by\",vny2uxJff:{alt:\"\",src:new URL(\"assets/MC2qacuNAMBJhOiejL7zMkXuQs.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,srcSet:`${new URL(\"assets/512/MC2qacuNAMBJhOiejL7zMkXuQs.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 512w, ${new URL(\"assets/1024/MC2qacuNAMBJhOiejL7zMkXuQs.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 1024w, ${new URL(\"assets/MC2qacuNAMBJhOiejL7zMkXuQs.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 2000w`},ZckEhR3V3:\"The ultimate beginners guide to Group by in Python Pandas\"},{Djh5_J2Mt:\"Guides\",id:\"StJSKbWNg\",iP8mvmvMM:\"2019-07-02T00:00:00.000Z\",KbGlbG3Yd:/*#__PURE__*/ _jsxs(React.Fragment,{children:[/*#__PURE__*/ _jsx(\"p\",{children:\"One of the most common actions while cleaning data or doing exploratory data analysis (EDA) is manipulating/fixing/renaming column names. So in this post, we will explore various methods of renaming columns of a Pandas dataframe. Two ways of modifying column titles\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"There are two main ways of altering column titles:\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"1.) the \",/*#__PURE__*/ _jsx(\"strong\",{children:\"columns method\"}),\" and\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"2.) the \",/*#__PURE__*/ _jsx(\"strong\",{children:\"rename method\"}),\".Columns methodIf we have our labelled DataFrame already created, the simplest method for overwriting the column labels is to call the columns method on the DataFrame object and provide the new list of names we\u2019d like to specify.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"For example, if we take our original DataFrame:We can modify the column titles/labels by adding the following line:\",/*#__PURE__*/ _jsx(\"code\",{children:\"df.columns = ['Column_title_1','Column_title_2']\"})]}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"A problem with this technique of renaming columns is that one has to change names of all the columns in the Dataframe. This approach would not work if we want to change the name of just one column. The rename method outlined below is more versatile and works for renaming all columns or just specific ones.Rename methodThe other technique for renaming columns is to call the rename method on the DataFrame object, than pass our list of labelled values to the columns parameter:\",/*#__PURE__*/ _jsx(\"code\",{children:\"df.rename(columns={0 : 'Title_1', 1 : 'Title2'}, inplace=True)\"}),\"Its important to note that since the rename method is attempting to actually \",/*#__PURE__*/ _jsx(\"em\",{children:\"rename \"}),\"existing labels, you need to specify the existing label first, followed by the new label. As shown in the example above.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Please note, we specify the \",/*#__PURE__*/ _jsx(\"code\",{children:\"True\"}),\" value for the \",/*#__PURE__*/ _jsx(\"code\",{children:\"inplace\"}),\" parameter here, in order to update the existing DataFrame. Whitout this, the function call returns a newly created DataFrame instead.Change a single column header nameIf you need to rename a specific column you can use the \",/*#__PURE__*/ _jsx(\"code\",{children:/*#__PURE__*/ _jsx(Link,{href:\"http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.rename.html\",openInNewTab:false,smoothScroll:false,children:/*#__PURE__*/ _jsx(\"a\",{children:\"df.rename()\"})})}),\" function and refer the columns to be renamed. Not all the columns have to be renamed when using rename method:\",/*#__PURE__*/ _jsx(\"code\",{children:\"df.rename(columns={'old_column_name': 'new_column_name'}, inplace=True)\"})]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\")\"})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,59diSLclj4JbpaAlKeVYUonN9mo.png\",\"data-framer-height\":\"876\",\"data-framer-width\":\"2032\",height:\"438\",src:new URL(\"assets/59diSLclj4JbpaAlKeVYUonN9mo.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"2032 / 876\"},width:\"1016\"})]}),qmKEIZQOx:\"#85f\",V8PWfbvT8:\"guide-to-renaming-columns-with-python-pandas\",vny2uxJff:{alt:\"\",src:new URL(\"assets/oUw1EI4ewMYxtaXuaiIRzyfiME.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,srcSet:`${new URL(\"assets/512/oUw1EI4ewMYxtaXuaiIRzyfiME.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 512w, ${new URL(\"assets/1024/oUw1EI4ewMYxtaXuaiIRzyfiME.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 1024w, ${new URL(\"assets/oUw1EI4ewMYxtaXuaiIRzyfiME.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 2000w`},ZckEhR3V3:\"Guide to renaming columns with Python Pandas\"},{Djh5_J2Mt:\"Guides\",id:\"kYTYyzL_h\",iP8mvmvMM:\"2019-07-12T00:00:00.000Z\",KbGlbG3Yd:/*#__PURE__*/ _jsxs(React.Fragment,{children:[/*#__PURE__*/ _jsx(\"p\",{children:\"Scientific notation isn't helpful when you are trying to make quick comparisons across your DataFrame, and when your values are not that long. However, Pandas will introduce scientific notation by default when the data type is a float. Here is a way of removing it.\"}),/*#__PURE__*/ _jsx(\"h3\",{children:\"What is Scientific Notation?\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Scientific notation (numbers with e) is a way of writing very large or very small numbers. A number is written in scientific notation when a number between 1 and 10 is multiplied by a power of 10.\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"For example:\"}),/*#__PURE__*/ _jsxs(\"ul\",{style:{\"--framer-font-size\":\"22px\",\"--framer-text-alignment\":\"start\",\"--framer-text-color\":\"rgb(60, 72, 78)\",\"--framer-text-transform\":\"none\"},children:[/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[\"2.3\",/*#__PURE__*/ _jsx(\"strong\",{children:\"e\"}),\"-5, means 2.3 times ten to the minus five power, or 0.000023\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[\"4.5\",/*#__PURE__*/ _jsx(\"strong\",{children:\"e\"}),\"6 means 4.5 times ten to the sixth power, or 4500000 which is the same as 4,500,000\"]})})]}),/*#__PURE__*/ _jsx(\"p\",{children:\"This is a notation standard used by many computer programs including Python Pandas. This is simply a shortcut for entering very large values, or tiny fractions, without using logarithms.\"}),/*#__PURE__*/ _jsx(\"h3\",{children:\"How Scientific Notation Looks in Pandas\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,bpDq6KpeM4yu9qafdFZB1HLiIik.png\",\"data-framer-height\":\"720\",\"data-framer-width\":\"2030\",height:\"360\",src:new URL(\"assets/bpDq6KpeM4yu9qafdFZB1HLiIik.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"2030 / 720\"},width:\"1015\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Let's create a test DataFrame with random numbers in a float format in order to illustrate scientific notation.\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df = pd.DataFrame(np.random.random(5)**10, columns=['random'])\"})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,xNb15jeg3wO184KTfdbXEWZbcU.png\",\"data-framer-height\":\"618\",\"data-framer-width\":\"2032\",height:\"309\",src:new URL(\"assets/xNb15jeg3wO184KTfdbXEWZbcU.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"2032 / 618\"},width:\"1016\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"As we can see the random column now contains numbers in scientific notation like 7.413775e-07. If you run the same command it will generate different numbers for you, but they will all be in the scientific notation format. This happens since we are using \",/*#__PURE__*/ _jsx(\"code\",{children:\"np.random\"}),\" to generate random numbers.\"]}),/*#__PURE__*/ _jsx(\"h3\",{children:\"How to suppress scientific notation in Pandas\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"There are four ways of showing all of the decimals when using Python Pandas instead of scientific notation.\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\"Solution 1: use .round()\"})}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df.round(5)\"})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,Ilg3VG7tID7nDqZCMPZqkUbc8E.png\",\"data-framer-height\":\"476\",\"data-framer-width\":\"2036\",height:\"238\",src:new URL(\"assets/Ilg3VG7tID7nDqZCMPZqkUbc8E.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"2036 / 476\"},width:\"1018\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\"Solution 2: Use apply to change format\"})}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df.apply(lambda x: '%.5f' % x, axis=1)\"})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,xLNbIANB0qjqY1nRYmoqpDDHlXg.png\",\"data-framer-height\":\"334\",\"data-framer-width\":\"2022\",height:\"167\",src:new URL(\"assets/xLNbIANB0qjqY1nRYmoqpDDHlXg.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"2022 / 334\"},width:\"1011\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\"Solution 3: Use .set_option()\"})}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Note that \",/*#__PURE__*/ _jsx(\"code\",{children:\".set_option()\"}),\" changes behavior globaly in Jupyter Notebooks, so it is not a temporary fix.\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"pd.set_option('display.float_format', lambda x: '%.5f' % x)\"})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,3W6esxOMAJPdBSJq3OWLPBh3lDA.png\",\"data-framer-height\":\"596\",\"data-framer-width\":\"2038\",height:\"298\",src:new URL(\"assets/3W6esxOMAJPdBSJq3OWLPBh3lDA.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"2038 / 596\"},width:\"1019\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"In order to revert Pandas behaviour to defaul use \",/*#__PURE__*/ _jsx(\"code\",{children:\".reset_option()\"}),/*#__PURE__*/ _jsx(\"strong\",{children:\".\"})]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"pd.reset_option('display.float_format')\"})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,2rVXTnziI6DQpuqIyqmx8LPSVUw.png\",\"data-framer-height\":\"536\",\"data-framer-width\":\"2032\",height:\"268\",src:new URL(\"assets/2rVXTnziI6DQpuqIyqmx8LPSVUw.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"2032 / 536\"},width:\"1016\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Note that the DataFrame was generated again using the random command, so we now have different numbers in it.\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\"Solution 4: Assign display.float_format\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"You can change the display format using any Python formatter:\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"pd.options.display.float_format = '{:.5f}'.format\"})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,HdpB7DmxTegbaIC6bLnuilsMMs.png\",\"data-framer-height\":\"574\",\"data-framer-width\":\"2050\",height:\"287\",src:new URL(\"assets/HdpB7DmxTegbaIC6bLnuilsMMs.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"2050 / 574\"},width:\"1025\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"To revert back, you can use \",/*#__PURE__*/ _jsx(\"code\",{children:\"pd.reset_option\"}),\" with a regex to reset more than one simultaneously. In this case to reset all options starting with \",/*#__PURE__*/ _jsx(\"code\",{children:\"display\"}),\" you can:\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"pd.reset_option('^display.', silent=True)\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"Now that you know how to modify the default Pandas output and how to suppress scientific notation, you are more empowered.\"})]}),qmKEIZQOx:\"#00CCDD\",V8PWfbvT8:\"how-to-suppress-scientific-notation-in-pandas\",vny2uxJff:{alt:\"\",src:new URL(\"assets/AYiep8MIF7lxNXFsQJS7wyyzdYA.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,srcSet:`${new URL(\"assets/512/AYiep8MIF7lxNXFsQJS7wyyzdYA.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 341w, ${new URL(\"assets/1024/AYiep8MIF7lxNXFsQJS7wyyzdYA.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 682w, ${new URL(\"assets/2048/AYiep8MIF7lxNXFsQJS7wyyzdYA.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 1365w, ${new URL(\"assets/AYiep8MIF7lxNXFsQJS7wyyzdYA.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 2000w`},ZckEhR3V3:\"How to suppress scientific notation in Pandas\"},{Djh5_J2Mt:\"Guides\",id:\"vIGMJnycY\",iP8mvmvMM:\"2019-06-29T00:00:00.000Z\",KbGlbG3Yd:/*#__PURE__*/ _jsxs(React.Fragment,{children:[/*#__PURE__*/ _jsx(\"p\",{children:'The Pandas library is the key library for Data Science and Analytics and a good place to start for beginners. Often called the \"Excel & SQL of Python, on steroids\" because of the powerful tools Pandas gives you for editing two-dimensional data tables in Python and manipulating large datasets with ease. In this short introduction to Pandas, I\u2019ll show you the most frequently used functions for Analysts and Data Scientists. Since this is the first article on Pandas on this site we\\'ll start from the basics.'}),/*#__PURE__*/ _jsx(\"h2\",{children:\"Installation\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Firstly you will need to install Pandas onto your machine/ environment. In this guide we will be using Jupyter Notebooks as this is the most common setup for Data Analysts. (Python version 3.7 the latest version available at the moment of writing) and because Jupyter Notebooks is excellent for beginners just getting started with Data Analysis.\"}),/*#__PURE__*/ _jsx(\"h3\",{children:\"Pandas install with Anaconda\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"The easiest way to install Jupyter Notebooks and Pandas set-up is to using the Anaconda distribution - a cross-platform distribution for data analysis and scientific computing. You can download the Windows, OS X and Linux versions of Anaconda. Anaconda Python distribution provides Jupiter Notebooks, together with a list of common Python packages which includes Pandas. After running the installer, you will have access to Pandas and the rest of the \",/*#__PURE__*/ _jsx(Link,{href:\"http://www.scipy.org/\",openInNewTab:false,smoothScroll:false,children:/*#__PURE__*/ _jsx(\"a\",{children:\"SciPy\"})}),\" stack without needing to install anything else.\"]}),/*#__PURE__*/ _jsx(\"p\",{children:\"If for some reason your Anaconda set-up does not have Pandas you can add it manually with the following command (terminal MacOS or linux)\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"conda install pandas\"})}),/*#__PURE__*/ _jsx(\"h3\",{children:\"Pandas install from PyPI\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Pandas can also be installed directly on your machine via pip from \",/*#__PURE__*/ _jsx(Link,{href:\"https://pypi.org/project/pandas\",openInNewTab:false,smoothScroll:false,children:/*#__PURE__*/ _jsx(\"a\",{children:\"PyPI\"})}),\".\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"pip install pandas\"})}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"pip install numpy\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"While NumPy does not require any other packages, but Pandas does, so make sure you get them all. The installation order is not important.\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"A full Pandas installation guide from Pandas creators can be found \",/*#__PURE__*/ _jsx(Link,{href:\"https://pandas.pydata.org/pandas-docs/stable/install.html\",openInNewTab:false,smoothScroll:false,children:/*#__PURE__*/ _jsx(\"a\",{children:\"here\"})}),\".\"]}),/*#__PURE__*/ _jsx(\"p\",{children:\"Start your Jupyter Notebook and test Paunads install by running the following .\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"import pandas as pd\"})}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"import numpy as np\"})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,bsrxjr5DwWCv53nR9CgESYke6g.png\",\"data-framer-height\":\"544\",\"data-framer-width\":\"2322\",height:\"272\",src:new URL(\"assets/bsrxjr5DwWCv53nR9CgESYke6g.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"2322 / 544\"},width:\"1161\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"If you are not getting an error message everything was installed correctly.\"}),/*#__PURE__*/ _jsx(\"h2\",{children:\"Pandas Data Structures: DataFrame and Series\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Pandas has two types of data structures : \",/*#__PURE__*/ _jsx(\"strong\",{children:\"Series \"}),\"and \",/*#__PURE__*/ _jsx(\"strong\",{children:\"DataFrames\"}),\".\"]}),/*#__PURE__*/ _jsx(\"h3\",{children:\"Series\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Pandas \",/*#__PURE__*/ _jsx(\"strong\",{children:\"Series\"}),\" is a one dimentional data structure (labeled array) capable of holding any data type.\"]}),/*#__PURE__*/ _jsx(\"p\",{children:\"You can create a series with:\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"s = pd.Series([4, -6, 9, 4], \\xa0index=['a', \\xa0'b', \\xa0'c', \\xa0'd'])\"})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,7qa1odpFAW7369F5Q7wPVhtgj3o.png\",\"data-framer-height\":\"344\",\"data-framer-width\":\"1286\",height:\"172\",src:new URL(\"assets/7qa1odpFAW7369F5Q7wPVhtgj3o.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1286 / 344\"},width:\"643\"}),/*#__PURE__*/ _jsx(\"h3\",{children:\"DataFrames\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"A Pandas \",/*#__PURE__*/ _jsx(\"strong\",{children:\"DataFrame \"}),\"is a two dimensional data structure (a table with rows and columns).\"]}),/*#__PURE__*/ _jsx(\"p\",{children:\"You can create DataFrames manually in Pandas or by importing data from files.\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"The simplest way to create a DataFrame is by typing the data into Python manually, which obviously only works for tiny datasets.\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"data = {'Country': ['China', \\xa0'China', \\xa0'China'], 'City': ['Chongqing', \\xa0'Shanghai', \\xa0'Beijing'], 'Population': [30165500, 24183300, 21707000]}\"})}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df = pd.DataFrame(data,columns=['Country', \\xa0'City', \\xa0'Population'])\"})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,xDFxJlmSfMIKVtbJwdFlsiXdg8.png\",\"data-framer-height\":\"618\",\"data-framer-width\":\"1286\",height:\"309\",src:new URL(\"assets/xDFxJlmSfMIKVtbJwdFlsiXdg8.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1286 / 618\"},width:\"643\"}),/*#__PURE__*/ _jsx(\"h2\",{children:\"Importing and Saving Data with Pandas\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"What\u2019s great about Pandas is that its designed to work with data in common formats like a CSV, JSON, TXT, \\xa0TSV file, or a SQL database and creates a Python object with rows and columns is called a data-frame. Data-frames in Pandas look very similar to typical spreadsheet. In comparison to working with lists and/or dictionaries through for loops or list comprehension data-frames are so much easier to work.\"}),/*#__PURE__*/ _jsx(\"h3\",{children:\"Read and Write to CSV\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"You can import data from a csv file using the \",/*#__PURE__*/ _jsx(\"code\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\".read_csv()\"})}),\" command. Note that \",/*#__PURE__*/ _jsx(\"code\",{children:\"df\"}),\" is a standard name for a data-frame, but you can call you data-frame anything you like.\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df = pd.read_csv('file_name.csv')\"})}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"If you want to save your data-frame from Pandas into a CSV file use the \",/*#__PURE__*/ _jsx(\"code\",{children:\"to_csv\"}),\" command.\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df.to_csv('myDataFrame.csv')\"})}),/*#__PURE__*/ _jsx(\"h3\",{children:\"Read and Write to Excel\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Excel is one of the most common data formats especially when dealing with small datasets. You can read an excel file the same way you read a csv:\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df = pd.read_excel('file_name.xlsx')\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"You can save your data-frame using bellow.\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df.to_excel('file_name.xlsx')\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"To specify the sheet name, just add the sheet name parameter:\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df.to_excel('file_name.xlsx', sheet_name = 'sheet1')\"})}),/*#__PURE__*/ _jsx(\"h3\",{children:\"Read multiple sheets from the same excel file\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"If you need to read multiple worksheets of the same workbook try \",/*#__PURE__*/ _jsx(\"code\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\"pd.ExcelFile\"})}),\":\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:\"xlsx = pd.ExcelFile('excel_file.xls')\"}),/*#__PURE__*/ _jsx(\"br\",{}),/*#__PURE__*/ _jsx(\"code\",{children:\"df = pd.read_excel(xlsx, \\xa0'Sheet1')\"})]}),/*#__PURE__*/ _jsx(\"h3\",{children:\"Read from Clipboard\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"You can even create a DataFrame from your clipboard as long as your Jupyter notebook is run on your machine and not in the cloud with \",/*#__PURE__*/ _jsx(\"code\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\"pandas.read_clipboard\"})}),\".\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df = pd.read_clipboard\"})}),/*#__PURE__*/ _jsx(\"h2\",{children:\"Viewing Data in Pandas\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Now that you know how to load data it is logical to ask how you can view it. In Jupyter notebooks you can just type name of your DataFrame and Python will show it to you. This is a convenient way to preview your loaded data, but this is not the same as opening file in Excel. Pandas by default only shows 100 rows and 20 columns. \\xa0\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Show your DataFrame (here DataFrame was named df):\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df\"})}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"If you load a wide data dataframe you\u2019ll notice that Pandas displays only 20 columns, and only 60 or so rows, truncating the middle section. If the default behaviour does not satisfy you, just edit the defaults using \",/*#__PURE__*/ _jsx(\"code\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\"set_option()\"})}),/*#__PURE__*/ _jsx(\"strong\",{children:\" \"}),\"for Pandas displays :\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"pd.set_option('display.max_rows', 500)\"})}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"pd.set_option('display.max_columns', 500)\"})}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"pd.set_option('display.width', 1000)\"})}),/*#__PURE__*/ _jsx(\"h3\",{children:\"Checking the number of rows and the number of columns in a DataFrame\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Scrolling through a big DataFrame to check if all rows and columns are loaded can be tidious. So instead of inspecting line by line just run the \",/*#__PURE__*/ _jsx(\"code\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\".shape\"})}),\" command.\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df.shape\"})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,YpT0hQ2DUBDxBzMJRRjx8vaCLCQ.png\",\"data-framer-height\":\"128\",\"data-framer-width\":\"1220\",height:\"64\",src:new URL(\"assets/YpT0hQ2DUBDxBzMJRRjx8vaCLCQ.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1220 / 128\"},width:\"610\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"In my example DataFrame \",/*#__PURE__*/ _jsx(\"code\",{children:\"df_avocado\"}),\" contains 18,249 rows, each with 14 columns as shown above in the output of \",/*#__PURE__*/ _jsx(\"code\",{children:\".shape\"}),\".\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"You can also check number of dimensions in your DataFrame with \",/*#__PURE__*/ _jsx(\"code\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\".ndim\"})}),\" command. If your DataFrame is created by loading a csv file you should expect two dimensions.\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df.ndim\"})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,Y0nPlvftgZHkS1jsjwRfYW4KU.png\",\"data-framer-height\":\"140\",\"data-framer-width\":\"1222\",height:\"70\",src:new URL(\"assets/Y0nPlvftgZHkS1jsjwRfYW4KU.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1222 / 140\"},width:\"611\"}),/*#__PURE__*/ _jsx(\"h3\",{children:\"Display first rows or bottom rows with head() and tail()\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"The \",/*#__PURE__*/ _jsx(\"code\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\".head()\"})}),/*#__PURE__*/ _jsx(\"strong\",{children:\" \"}),\"function in Pandas, by default, displays the top 5 rows of data in the DataFrame. While function\",/*#__PURE__*/ _jsx(\"strong\",{children:\" \"}),/*#__PURE__*/ _jsx(\"code\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\".tail()\"})}),\" does the opposite, it gives you the last 5 rows. You can pass any number of rows into the commands for display.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:\"df.head()\"}),\" or \",/*#__PURE__*/ _jsx(\"code\",{children:\"df.head(100)\"})]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:\"df.tail()\"}),\" or \",/*#__PURE__*/ _jsx(\"code\",{children:\"df.head(50)\"})]}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,QXqhuDHg2qCaLNSoqXdsjcGZyQ.png\",\"data-framer-height\":\"1232\",\"data-framer-width\":\"1242\",height:\"616\",src:new URL(\"assets/QXqhuDHg2qCaLNSoqXdsjcGZyQ.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1242 / 1232\"},width:\"621\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,WaUrJo0ywRLmI4BQNcsvMQbM6g.png\",\"data-framer-height\":\"1006\",\"data-framer-width\":\"1252\",height:\"503\",src:new URL(\"assets/WaUrJo0ywRLmI4BQNcsvMQbM6g.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1252 / 1006\"},width:\"626\"}),/*#__PURE__*/ _jsx(\"h3\",{children:\"Displaying columns in you DataFrame\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"If you have a wide DataFrame not all columns will fit on the screen, so you will be scrolling alot. Doing this can be tricky when you need to copy a column name, or if you already run multiple commands and getting back to the DataFrame means scrolling in your notebook or running another .head() command. You can save yourself some time by running the \\xa0\",/*#__PURE__*/ _jsx(\"code\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\".columns\"})}),\" command instead, this will print out all columns in the DataFrame.\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df.columns\"})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,FsOo0WUYtOmqL66ySvbCR4uJM.png\",\"data-framer-height\":\"148\",\"data-framer-width\":\"1242\",height:\"74\",src:new URL(\"assets/FsOo0WUYtOmqL66ySvbCR4uJM.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1242 / 148\"},width:\"621\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,I1fZMKIcq3T9aZd7Z2CwBaC9im8.png\",\"data-framer-height\":\"238\",\"data-framer-width\":\"2038\",height:\"119\",src:new URL(\"assets/I1fZMKIcq3T9aZd7Z2CwBaC9im8.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"2038 / 238\"},width:\"1019\"}),/*#__PURE__*/ _jsx(\"h3\",{children:\"Data types of columns in a DataFrame\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Many DataFrames have mixed data types, where some columns are numbers, some are strings, and some are dates etc. While, CSV files do not contain information on what data types are contained in each column Pandas infers the data types when loading the data. So if a column contains only numbers, pandas will set that column\u2019s data type to numeric: integer or float.\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"You can see the types assigned to each column with the \",/*#__PURE__*/ _jsx(\"code\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\".dtypes\"})}),\" :\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df.dtypes\"})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,nVNhAvBEovKjOBJnbSFq2nzh2K0.png\",\"data-framer-height\":\"610\",\"data-framer-width\":\"1236\",height:\"305\",src:new URL(\"assets/nVNhAvBEovKjOBJnbSFq2nzh2K0.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1236 / 610\"},width:\"618\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"If you want to see more information about your DataFrame in one place you can use \",/*#__PURE__*/ _jsx(\"code\",{children:/*#__PURE__*/ _jsx(\"strong\",{children:\".info()\"})}),\" :\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df.info()\"})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,3qipaamEnD3FXtmyrCcdOx1EqI.png\",\"data-framer-height\":\"750\",\"data-framer-width\":\"1050\",height:\"375\",src:new URL(\"assets/3qipaamEnD3FXtmyrCcdOx1EqI.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1050 / 750\"},width:\"525\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:\".info()\"}),\" will print a concise summary of a DataFrame.\"]}),/*#__PURE__*/ _jsx(\"p\",{children:\"This method prints information about a DataFrame including the index dtype and column dtypes, non-null values and memory usage.\"}),/*#__PURE__*/ _jsx(\"h3\",{children:\"Count non-null values in the DataFrame\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"In real worls spreadsheets quite often contain missing or null data. This can present challenges when analysing data, so it is important to check you imported DataFrame for null values. This can easily be done with \",/*#__PURE__*/ _jsx(\"strong\",{children:\".count():\"})]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df.count()\"})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,bTpoyUFpfoW5HKXc6TeAo8XC0Nc.png\",\"data-framer-height\":\"610\",\"data-framer-width\":\"2038\",height:\"305\",src:new URL(\"assets/bTpoyUFpfoW5HKXc6TeAo8XC0Nc.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"2038 / 610\"},width:\"1019\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"In my exsample all values are present, but this is a rear case of clean data. Avocado data came from Kaggel and was created with data analysis in mind.\"}),/*#__PURE__*/ _jsx(\"h2\",{children:\"Selecting and Indexing data\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Pandas Indexing using \",/*#__PURE__*/ _jsx(\"strong\",{children:\"[ ]\"}),\", .\",/*#__PURE__*/ _jsx(\"strong\",{children:\"loc[]\"}),\", .\",/*#__PURE__*/ _jsx(\"strong\",{children:\"iloc[ ]\"})]}),/*#__PURE__*/ _jsx(\"p\",{children:\"There are plenty of ways to pull the columns and rows from a DataFrame. There are some indexing method in Pandas which help in getting the right element of data from a DataFrame. These indexing methods may look very similar but behave very differently. Pandas support four types of Multi-axes indexing they are:\"}),/*#__PURE__*/ _jsxs(\"ul\",{style:{\"--framer-font-size\":\"22px\",\"--framer-text-alignment\":\"start\",\"--framer-text-color\":\"rgb(60, 72, 78)\",\"--framer-text-transform\":\"none\"},children:[/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Dataframe.[ ] \"}),\"-\",/*#__PURE__*/ _jsx(\"strong\",{children:\" \"}),\"This function also known as indexing operator.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Dataframe.loc[ ]: \"}),\"-\",/*#__PURE__*/ _jsx(\"strong\",{children:\" \"}),\"This function is used for labels.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Dataframe.iloc[ ]: \"}),\"- This function is used for positions or integer based.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Dataframe.ix[ ]:\"}),\" - Starting in 0.20.0, the \",/*#__PURE__*/ _jsx(\"code\",{children:\".ix\"}),\"indexer is deprecated, in favor of the more strict \",/*#__PURE__*/ _jsx(\"code\",{children:\".iloc\"}),\"and \",/*#__PURE__*/ _jsx(\"code\",{children:\".loc\"}),\"indexers.\"]})})]}),/*#__PURE__*/ _jsx(\"p\",{children:\"All together they are called the indexers. These are the standart ways to index data. These are four function which help in getting the elements, rows, and columns from a DataFrame.\"}),/*#__PURE__*/ _jsx(\"h3\",{children:\"Selecting a column using indexing operator []\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Selecting a column is easy all you need to do is type ['your column name'] after the DataFrame:\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df['column']\"})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,mdxqb1RFDqj8JQC6jNlUhuUrs.png\",\"data-framer-height\":\"242\",\"data-framer-width\":\"2034\",height:\"121\",src:new URL(\"assets/mdxqb1RFDqj8JQC6jNlUhuUrs.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"2034 / 242\"},width:\"1017\"}),/*#__PURE__*/ _jsx(\"h3\",{children:\"Selecting row by index\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df.loc[index]\"})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,CISZ07i78bsSVVNmj4kXA08jk.png\",\"data-framer-height\":\"722\",\"data-framer-width\":\"2034\",height:\"361\",src:new URL(\"assets/CISZ07i78bsSVVNmj4kXA08jk.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"2034 / 722\"},width:\"1017\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Do not forget that python starts indexing from 0. So if you want second row you need to ask for index 1.\"}),/*#__PURE__*/ _jsx(\"h3\",{children:\"Selecting in Pandas based on values in a column\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"To select rows whose column value equals a scalar, \",/*#__PURE__*/ _jsx(\"code\",{children:\"some_value\"}),\", use \",/*#__PURE__*/ _jsx(\"code\",{children:\"==\"}),\":\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Note that = sign in python taken for assignment, so if want to specify equality you need to use \",/*#__PURE__*/ _jsx(\"code\",{children:\"==\"}),\" instead.\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df.loc[df['column'] == some_value]\"})}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"To select rows whose column value is in an iterable, \",/*#__PURE__*/ _jsx(\"code\",{children:\"some_values\"}),\", use \",/*#__PURE__*/ _jsx(\"code\",{children:\"isin\"}),\":\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df.loc[df['column'].isin(some_values)]\"})}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Combine multiple conditions with \",/*#__PURE__*/ _jsx(\"code\",{children:\"&\"}),\":\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df.loc[(df['column'] >= A) & (df['column_name'] <= B)]\"})}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Note the parentheses. Due to Python's operator precedence rules, \",/*#__PURE__*/ _jsx(\"code\",{children:\"&\"}),\"binds more tightly than \",/*#__PURE__*/ _jsx(\"code\",{children:\"<=\"}),\"and \",/*#__PURE__*/ _jsx(\"code\",{children:\">=\"}),\". Thus, the parentheses in the last example are necessary.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"To select rows whose column value \",/*#__PURE__*/ _jsx(\"em\",{children:\"does not equal\"}),/*#__PURE__*/ _jsx(\"code\",{children:\"some_value\"}),\", use \",/*#__PURE__*/ _jsx(\"code\",{children:\"!=\"}),\":\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df.loc[df['column'] != some_value]\"})}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:\"isin\"}),\"returns a boolean Series, so to select rows whose value is \",/*#__PURE__*/ _jsx(\"em\",{children:\"not \"}),\"in \",/*#__PURE__*/ _jsx(\"code\",{children:\"some_values\"}),\", negate the boolean Series using \",/*#__PURE__*/ _jsx(\"code\",{children:\"~\"}),\":\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df.loc[~df['column_name'].isin(some_values)]\"})}),/*#__PURE__*/ _jsx(\"h2\",{children:\"Summarising Data\"}),/*#__PURE__*/ _jsx(\"h3\",{children:\"Getting basic stats for your DataFrame with .describe()\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Now that you inspected your DataFrame and know how to select specific data from a DataFrame it is time to get some basic statistics about it. When you run \",/*#__PURE__*/ _jsx(\"strong\",{children:\".describe() \"}),\"on the whole dataframe it prints out statistics for numeric columns by default.\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df.describe()\"})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,TE9ItpMZdgzoX4XqY03h2CuBPCY.png\",\"data-framer-height\":\"630\",\"data-framer-width\":\"2034\",height:\"315\",src:new URL(\"assets/TE9ItpMZdgzoX4XqY03h2CuBPCY.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"2034 / 630\"},width:\"1017\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"For \",/*#__PURE__*/ _jsx(\"em\",{children:\"numeric columns d\"}),\"escribe() return such basic statistics as: the value count, mean, standard deviation, minimum, maximum, and 25th, 50th, and 75th quantiles for the data in a column.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Meanwhile, for \",/*#__PURE__*/ _jsx(\"em\",{children:\"string columns\"}),\" describe() returns the value count, the number of unique entries, the most frequently occurring value (\u2018top\u2019), and the number of times the top value occurs (\u2018freq\u2019).\"]}),/*#__PURE__*/ _jsx(\"h3\",{children:\"Counts of unique values with value_counts()\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"You canget a count of number of rows with each unique value of variable using \",/*#__PURE__*/ _jsx(\"strong\",{children:\".value_counts() :\"})]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df['column'].value_counts()\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"It doesn't usually make sense to perform value_counts on a DataFrame. Instead this command should be used on a specific column. Running this command without specifying a column will result in an error: AttributeError: 'DataFrame' object has no attribute 'value_counts'.\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"This command will return an object that will be in descending order so that the first element is the most frequently-occurring element. Excludes NA values by default.\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,v87e4LS51i45pXlzURfsKw2ukMg.png\",\"data-framer-height\":\"210\",\"data-framer-width\":\"2042\",height:\"105\",src:new URL(\"assets/v87e4LS51i45pXlzURfsKw2ukMg.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"2042 / 210\"},width:\"1021\"}),/*#__PURE__*/ _jsx(\"h3\",{children:\"Counting unique values with .nunique().\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"You can request a count of distinct values in a column with \",/*#__PURE__*/ _jsx(\"strong\",{children:\".nunique()\"}),\" :\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df['column'].nunique()\"})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,wTfp9agEKFvsPWujRWhfMmL5QY.png\",\"data-framer-height\":\"138\",\"data-framer-width\":\"2038\",height:\"69\",src:new URL(\"assets/wTfp9agEKFvsPWujRWhfMmL5QY.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"2038 / 138\"},width:\"1019\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Uniques are returned in order of appearance. Hash table-based unique, therefore does NOT sort.\"}),/*#__PURE__*/ _jsx(\"h3\",{children:\"Listing unique values with .unique()\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"If you want to see unique values in the column you can use \",/*#__PURE__*/ _jsx(\"strong\",{children:\".unique() \"}),\"for this:\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df['column'].unique()\"})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,taaPCGf8nzuu6UrQAwBHTzTA0.png\",\"data-framer-height\":\"134\",\"data-framer-width\":\"2042\",height:\"67\",src:new URL(\"assets/taaPCGf8nzuu6UrQAwBHTzTA0.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"2042 / 134\"},width:\"1021\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"This will output an array with unique values. If their are too many unique values in the column some of them will not be displayed in the Jupyter notebooks by default.\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"If you want a list of unique values it is better to run \",/*#__PURE__*/ _jsx(\"strong\",{children:\".unique().tolist()\"}),\":\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df['column'].unique().tolist()\"})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,WIIs4a3BdDyEvEImYSAZ4DfvM.png\",\"data-framer-height\":\"754\",\"data-framer-width\":\"2046\",height:\"377\",src:new URL(\"assets/WIIs4a3BdDyEvEImYSAZ4DfvM.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"2046 / 754\"},width:\"1023\"}),/*#__PURE__*/ _jsx(\"h3\",{children:\"List of Summary functions\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Pandas provides a large set of \",/*#__PURE__*/ _jsx(\"strong\",{children:\"summary functions \"}),\"that produce single values for each of the groups. When applied to a DataFrame, the result is returned as a pandas Series for each column. Examples:\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\".sum() - \"}),\"Sum values of each object.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\".median() - \"}),\"Median value of each object.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\".quantile([0.25,0.75]) - \"}),\"Quantiles of each object.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\".min() -\"}),\"Minimum value in each object.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\".max() -\"}),\" Maximum value in each object.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\".mean()\"}),\" - Mean value of each object.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\".var() - \"}),\"Variance of each object.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\".std()\"}),\" - Standard deviation of each object.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\".mad() -\"}),\" Mean absolute deviation from mean value.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\".skew() -\"}),\" Sample skewness (3rd moment) of values.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\".kurt() -\"}),\" Sample kurtosis (4th moment) of values.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\".cumsum() - \"}),\"Cumulative sum of values.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\".cumprod() - \"}),\"Cumulative product of values.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\".pct_change() -\"}),\" Computes percent changes.\"]}),/*#__PURE__*/ _jsx(\"h2\",{children:\"Manipulating data\"}),/*#__PURE__*/ _jsx(\"h3\",{children:\"Dropping column from DataFrame in Pandas\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"You can drop column with \",/*#__PURE__*/ _jsx(\"strong\",{children:\".drop() :\"})]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df.drop('column', axis =1)\"})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,kC6L2WAW3nU8bmjBrMOYDBBbOA.png\",\"data-framer-height\":\"850\",\"data-framer-width\":\"2038\",height:\"425\",src:new URL(\"assets/kC6L2WAW3nU8bmjBrMOYDBBbOA.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"2038 / 850\"},width:\"1019\"}),/*#__PURE__*/ _jsx(\"h3\",{children:\"Renaming column in Pandas\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Renaming a column in Pandas can be asily achived by using the DataFrame \",/*#__PURE__*/ _jsx(\"strong\",{children:\".rename()\"}),\" function. The rename function is easy to use, and quite flexible.\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:'df.rename(columns={\"old_column_name\": \"new_column_name\"}, inplace =True'})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,EdusLSsTbE5sIUwgXYDcxwgwOfw.png\",\"data-framer-height\":\"794\",\"data-framer-width\":\"2034\",height:\"397\",src:new URL(\"assets/EdusLSsTbE5sIUwgXYDcxwgwOfw.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"2034 / 794\"},width:\"1017\"}),/*#__PURE__*/ _jsx(\"h3\",{children:\"Handling Missing Data\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"When you encounter missing data you have a number of options for handling missing data: Filtering out missing data or Filling in missing data.\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Filtering out missing is done with \",/*#__PURE__*/ _jsx(\"strong\",{children:\".dropna()\"})]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df.dropna()\"})}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Filling in missing data is done with\",/*#__PURE__*/ _jsx(\"strong\",{children:\" .fillna(value)\"})]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df.fillna(value)\"})}),/*#__PURE__*/ _jsx(\"h2\",{children:\"Conclusion\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Python Pandas are great for data munging and preparation and so is a great way to start your data analysis journey. P\",/*#__PURE__*/ _jsx(\"em\",{children:\"andas\"}),\" helps fill this gap, enabling you to carry out your entire data analysis workflow in Python without having to switch to difrent tools and learn other languages.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"However if you want to do sophisticated modeling it most likely would not be enough. P\",/*#__PURE__*/ _jsx(\"em\",{children:\"andas\"}),\" does not implement significant modeling functionality outside of linear and panel regression; for this, look to such Python libraries as statsmodels and scikit-learn.\"]})]}),qmKEIZQOx:\"#4455BB\",V8PWfbvT8:\"the-complete-beginners-guide-to-pandas\",vny2uxJff:{alt:\"\",src:new URL(\"assets/4096/AbfU4JX4GGR333aU7JDFv9edsp0.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,srcSet:`${new URL(\"assets/512/AbfU4JX4GGR333aU7JDFv9edsp0.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 512w, ${new URL(\"assets/1024/AbfU4JX4GGR333aU7JDFv9edsp0.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 1024w, ${new URL(\"assets/2048/AbfU4JX4GGR333aU7JDFv9edsp0.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 2048w, ${new URL(\"assets/4096/AbfU4JX4GGR333aU7JDFv9edsp0.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 4096w, ${new URL(\"assets/AbfU4JX4GGR333aU7JDFv9edsp0.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 4624w`},ZckEhR3V3:\"The complete beginners guide to Pandas\"},{Djh5_J2Mt:\"Guides\",id:\"TUbpO2ZD1\",iP8mvmvMM:\"2019-06-29T00:00:00.000Z\",KbGlbG3Yd:/*#__PURE__*/ _jsxs(React.Fragment,{children:[/*#__PURE__*/ _jsx(\"p\",{children:\"This tutorial will cover basic techniques for financial data analysis. Specifically, we will use the pandas library to import stock data and manipulate the data to identify an investment thesis. This tutorial is targeted at complete beginners, keep in mind that because of their simplicity these techniques won\u2019t make you any money; they are designed to inspire you to investigate further.\"}),/*#__PURE__*/ _jsx(\"h2\",{children:\"Step 1: Installing prerequisites\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Assuming you\u2019re running the latest version of Python 3, we will need to install a couple of basic packages:\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:\"pip3 install numpy\"}),/*#__PURE__*/ _jsx(\"br\",{}),/*#__PURE__*/ _jsx(\"code\",{children:\"pip3 install matplotlib\"}),/*#__PURE__*/ _jsx(\"br\",{}),/*#__PURE__*/ _jsx(\"code\",{children:\"pip3 install pandas\"}),/*#__PURE__*/ _jsx(\"br\",{}),/*#__PURE__*/ _jsx(\"code\",{children:\"pip3 install pandas-datareader\"}),/*#__PURE__*/ _jsx(\"br\",{}),/*#__PURE__*/ _jsx(\"code\",{children:\"pip3 install beautifulsoup4\"}),/*#__PURE__*/ _jsx(\"br\",{}),/*#__PURE__*/ _jsx(\"code\",{children:\"pip3 install sklearn\"}),/*#__PURE__*/ _jsx(\"br\",{}),/*#__PURE__*/ _jsx(\"code\",{children:\"pip3 install quandl\"})]}),/*#__PURE__*/ _jsx(\"p\",{children:\"If you would like to learn more about Matplotlib visit our tutorial on the subject here. Likewise we have a great tutorial on data analysis with pandas.\"}),/*#__PURE__*/ _jsx(\"h2\",{children:\"Step 2: Imports\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"To begin with we will need to do some imports of modules we will be using throughout the tutorial.\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:\"import datetime as dt\"}),/*#__PURE__*/ _jsx(\"br\",{}),/*#__PURE__*/ _jsx(\"code\",{children:\"import matplotlib.pyplot as plt\"}),/*#__PURE__*/ _jsx(\"br\",{}),/*#__PURE__*/ _jsx(\"code\",{children:\"from matplotlib import style\"}),/*#__PURE__*/ _jsx(\"br\",{}),/*#__PURE__*/ _jsx(\"code\",{children:\"import pandas as pd\"}),/*#__PURE__*/ _jsx(\"br\",{}),/*#__PURE__*/ _jsx(\"code\",{children:\"import pandas_datareader.data as web\"})]}),/*#__PURE__*/ _jsx(\"p\",{children:\"We'll be using date-time to work with dates, matplotlib will allow us to create graphs and pandas should let us manipulate data.\"}),/*#__PURE__*/ _jsx(\"h2\",{children:\"Step 3: Setup\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Now lets prepare some variables and imports for manipulation later on.\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:\"style.use('ggplot')\"}),/*#__PURE__*/ _jsx(\"br\",{}),/*#__PURE__*/ _jsx(\"code\",{children:\"start = dt.datetime(2018, 1, 1)\"}),/*#__PURE__*/ _jsx(\"br\",{}),/*#__PURE__*/ _jsx(\"code\",{children:\"end = dt.datetime.now()\"})]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"qkey = 'YOUR API KEY HERE'\"})}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df = web.DataReader('WIKI/GOOGL', 'quandl', start, end, access_key=qkey)\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"First things first our graphs should look good, style.use allows us to do this, ggplot is typically the better looking of the themes.\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Next we create start and end variables, so we can easily call the same date-range in multiple contexts.\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"In order to get data from the Quandl API you would have to register on their website and get the API key first. You can register \",/*#__PURE__*/ _jsx(Link,{href:\"https://www.quandl.com/?modal=register\",openInNewTab:false,smoothScroll:false,children:/*#__PURE__*/ _jsx(\"a\",{children:\"here\"})}),\", once registered confirm your email address and get your API key from \",/*#__PURE__*/ _jsx(Link,{href:\"https://www.quandl.com/account/profile\",openInNewTab:false,smoothScroll:false,children:/*#__PURE__*/ _jsx(\"a\",{children:\"'account settings'\"})}),\" and place it inside the \",/*#__PURE__*/ _jsx(\"code\",{children:\"qkey\"}),\" variable.\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Finally, we use pandas DataReader to request Stockmarket data from the Quandl API, in this case we are requesting Google trading data since the beginning of the year (\",/*#__PURE__*/ _jsx(\"code\",{children:\"start\"}),\") until present (\",/*#__PURE__*/ _jsx(\"code\",{children:\"end\"}),\").\"]}),/*#__PURE__*/ _jsx(\"p\",{children:\"After running the above we should call the first 10 rows of the dataframe to confirm that everything is working correctly. So lets run:\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df.head()\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"This should output table with the first 10 rows of information.\"}),/*#__PURE__*/ _jsx(\"h2\",{children:\"Step 4: Looking at the data\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"If you're new to the stockmarket and trading, this data may not be the easiest to understand. Below is a quick primer on what sort of inforamtin we're getting from the dataframe\"}),/*#__PURE__*/ _jsxs(\"ol\",{style:{\"--framer-font-size\":\"22px\",\"--framer-text-alignment\":\"start\",\"--framer-text-color\":\"rgb(60, 72, 78)\",\"--framer-text-transform\":\"none\"},children:[/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Open \"}),\"- The price of a share at the time when the stockmarket opens for morning trading.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"High -\"}),\" The highest value recorded during the trading day.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Low - \"}),\"The lowest value recorded during the trading day.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Close -\"}),\" The final price when the Stockmarket was closed.\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Volume - \"}),\"The number of shares traded for the day\"]})}),/*#__PURE__*/ _jsx(\"li\",{\"data-preset-tag\":\"p\",style:{\"--framer-font-size\":\"22px\",\"--framer-line-height\":\"1.6em\"},children:/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Adj. Open / Adj. High / Adj. Low / Adj. Close - \"}),\"Unlike the normal open, close, low, high, values the adjusted versions attempt to account for a stock split/splits in the ticker's history. Some companies can choose to do a stock split where they say every share is not worth two shares, splitting the value in half. Adjusted values are helpful as they account for stock splits, providing a price relative to the split. \",/*#__PURE__*/ _jsx(\"strong\",{children:\"This is why you should mostly use adjusted values.\"})]})})]}),/*#__PURE__*/ _jsx(\"h2\",{children:\"Step 5: Graphing the data\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"In order to start graphing the data all we need to do is run:\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:\"df.plot()\"}),/*#__PURE__*/ _jsx(\"br\",{}),/*#__PURE__*/ _jsx(\"code\",{children:\"plt.show()\"})]}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,ENN7yKbQJoMq2oHSB1vyP2sLuog.png\",\"data-framer-height\":\"674\",\"data-framer-width\":\"1366\",height:\"337\",src:new URL(\"assets/ENN7yKbQJoMq2oHSB1vyP2sLuog.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1366 / 674\"},width:\"683\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Unfortunately, since the Volume data is at a much greater scale than the other columns all we see is the volume graph.\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"But we can reference specific columns in the data frame by running:\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"code\",{children:\"df['AdjClose'].plot()\"}),/*#__PURE__*/ _jsx(\"br\",{}),/*#__PURE__*/ _jsx(\"code\",{children:\"plt.show()\"})]}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,EXOR4FhHQ7uZ10KmH5qxjiteK8Y.png\",\"data-framer-height\":\"732\",\"data-framer-width\":\"1408\",height:\"366\",src:new URL(\"assets/EXOR4FhHQ7uZ10KmH5qxjiteK8Y.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1408 / 732\"},width:\"704\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Now the result is much clearer and no key is displayed since we are only viewing one column. We can also graph multiple columns simultaneously:\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsxs(\"code\",{children:[\"df[['AdjOpen','AdjClose']].plot()\",/*#__PURE__*/ _jsx(\"br\",{}),\"plt.show()\"]})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,3AQZMWGOm5SgWpPgnaFrk5hCrQ.png\",\"data-framer-height\":\"706\",\"data-framer-width\":\"1406\",height:\"353\",src:new URL(\"assets/3AQZMWGOm5SgWpPgnaFrk5hCrQ.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"1406 / 706\"},width:\"703\"}),/*#__PURE__*/ _jsx(\"h2\",{children:\"Conclusion\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Thats it for the first part of our tutorial on Financial data with Python. Naturally, there is much more we could do here, but this should give you a solid foundation for the next tutorials in our series. Let me know what you thought of the tutorial in the comments and if you have any requests.\"}),/*#__PURE__*/ _jsx(\"h2\",{children:\"Appendix #1: Saving to CSV\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"We can also easily save the data to a csv, so as not to have to keep making API requests.\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df.to_csv('google.csv')\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"Now instead of getting the data from an API every time, we could just use the .csv file instead.\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"df = pd.read_csv('google.csv', parse_dates=True, index_col=0)\"})})]}),qmKEIZQOx:\"#05f\",V8PWfbvT8:\"python-programming-for-finance\",vny2uxJff:{alt:\"\",src:new URL(\"assets/KkWHrSY8eBE2CG9VN40y106Txg.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,srcSet:`${new URL(\"assets/512/KkWHrSY8eBE2CG9VN40y106Txg.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 512w, ${new URL(\"assets/1024/KkWHrSY8eBE2CG9VN40y106Txg.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 1024w, ${new URL(\"assets/KkWHrSY8eBE2CG9VN40y106Txg.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 2000w`},ZckEhR3V3:\"Data project #1: Stockmarket analysis\"},{Djh5_J2Mt:\"Guides\",id:\"sQrXFl0Re\",iP8mvmvMM:\"2019-06-10T00:00:00.000Z\",KbGlbG3Yd:/*#__PURE__*/ _jsxs(React.Fragment,{children:[/*#__PURE__*/ _jsx(\"p\",{children:\"We're living in the mobile age when productivity is not limited to desks. Setting-up Jupyter notebooks in the cloud can enable you to use it anywhere, including your mobile phone!\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"br\",{}),\"In this guide, we will be using \",/*#__PURE__*/ _jsx(Link,{href:\"https://www.linode.com/?r=5e7ababb79f420986097e008e67ab29172bcc2fb\",openInNewTab:false,smoothScroll:false,children:/*#__PURE__*/ _jsx(\"a\",{children:\"Linode\"})}),\", its a great starting point for cloud beginners as it offers good value for money. Naturally, for more advanced workflows we'll be using AWS, but if you're just starting out and only plan on doing basic data visualization and analysis this won't be necessary.\"]}),/*#__PURE__*/ _jsx(\"h2\",{children:\"Step 1: Create your account & setup Linode\"}),/*#__PURE__*/ _jsx(\"h3\",{children:\"1.1: Select a plan\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,RlLkh17fSLzM5jTj3VpNpbgilao.png\",\"data-framer-height\":\"1499\",\"data-framer-width\":\"2000\",height:\"749\",src:new URL(\"assets/RlLkh17fSLzM5jTj3VpNpbgilao.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"2000 / 1499\"},width:\"1000\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Select either the Nanode 1GB plan or the Linode 2GB plan\\xa0\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Go to \",/*#__PURE__*/ _jsx(Link,{href:\"https://www.linode.com/?r=5e7ababb79f420986097e008e67ab29172bcc2fb\",openInNewTab:false,smoothScroll:false,children:/*#__PURE__*/ _jsx(\"a\",{children:\"this link\"})}),\" to start settingup your Linode.\"]}),/*#__PURE__*/ _jsx(\"p\",{children:\"As a beginner you should go for the $5 Nanode plan as you will not be needing a powerful server for doing basic tasks with Jupyter notebooks.\"}),/*#__PURE__*/ _jsx(\"h3\",{children:\"1.2: Selecting a Linux Distribution\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,7qIFIEjJqEyjiG2Rs0jidUxPU9o.jpeg\",\"data-framer-height\":\"1051\",\"data-framer-width\":\"2000\",height:\"525\",src:new URL(\"assets/7qIFIEjJqEyjiG2Rs0jidUxPU9o.jpeg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"2000 / 1051\"},width:\"1000\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Selecting linux distro\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"We'll be going with whatever the latest distribution of Ubuntu is, at the time of writing this is 19.04, for you the number might be higher. (.04 releases are long-term supported by Ubuntu which means you'll continue to receive updates for at least 2 years)\"}),/*#__PURE__*/ _jsx(\"h3\",{children:\"1.3: Add a label and create a password\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,HNwuWH5XKfNTVbCFW7sEcnaiU.jpeg\",\"data-framer-height\":\"1436\",\"data-framer-width\":\"2000\",height:\"718\",src:new URL(\"assets/HNwuWH5XKfNTVbCFW7sEcnaiU.jpeg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"2000 / 1436\"},width:\"1000\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Selecting Location, Plan and Label\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Select the region that is the closest to you geographically, this will make a big difference on slower internet connections, as its faster to connect to a local server. For me this is London.\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Add a label to help you remember the contents of your Linode (good if you're planning on using multiple Linodes for different tasks).\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Next, create a password. The default username will be root, the password you set-up here is what we'll use to access the server for the first time.\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Fill in all the information on this page and hit create in the top right-hand corner.\"}),/*#__PURE__*/ _jsx(\"h3\",{children:\"1.4: Copy the IP address\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,wHZFkEydeCIwEA9FESbKuaiWw0.jpeg\",\"data-framer-height\":\"1392\",\"data-framer-width\":\"2000\",height:\"696\",src:new URL(\"assets/wHZFkEydeCIwEA9FESbKuaiWw0.jpeg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"2000 / 1392\"},width:\"1000\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Setup screen\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Next, you will see a progress bar with the screen above. The second widget on the right-hand side contains the IP address (blacked out here for security) note this down as we will use it to connect to the server.\"}),/*#__PURE__*/ _jsx(\"h2\",{children:\"Step 2: Connecting to the server\"}),/*#__PURE__*/ _jsx(\"h3\",{children:\"2.1: \\xa0Install Termius\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,3yU0zniUxklxk9QsDXqnj3SI0.png\",\"data-framer-height\":\"1499\",\"data-framer-width\":\"2000\",height:\"749\",src:new URL(\"assets/3yU0zniUxklxk9QsDXqnj3SI0.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"2000 / 1499\"},width:\"1000\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Download an SSH client. For iOS and Android termius is one of the best.\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Next you'll need an SSH client. This is what will allow us to connect to a remote server, macOS has terminal built-in, but on Android and iOS Termius is the best ssh client. \\xa0\",/*#__PURE__*/ _jsx(Link,{href:\"https://termius.com/\",openInNewTab:false,smoothScroll:false,children:/*#__PURE__*/ _jsx(\"a\",{children:\"Get Termius here\"})}),\".\"]}),/*#__PURE__*/ _jsx(\"h3\",{children:\"2.2: Creating a host\"}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,I9k5ryb9hC41TAdyymWZb6Q4s.png\",\"data-framer-height\":\"1499\",\"data-framer-width\":\"2000\",height:\"749\",src:new URL(\"assets/I9k5ryb9hC41TAdyymWZb6Q4s.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"2000 / 1499\"},width:\"1000\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Create a new host in termius\"}),/*#__PURE__*/ _jsx(\"p\",{children:'Once installed open termius and select \"Start without registering\" next go into \"Hosts\" and create a new Host. Fill in the details as follows:'}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Alias: \"}),\"Jupyter_notebook\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Hostname: \"}),/*#__PURE__*/ _jsx(\"em\",{children:\"(Enter you linode's IP address her)\"})]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Use SSH: \"}),/*#__PURE__*/ _jsx(\"em\",{children:\"(Toggle this option on)\"})]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Username: \"}),\"Root\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[/*#__PURE__*/ _jsx(\"strong\",{children:\"Password: \"}),/*#__PURE__*/ _jsx(\"em\",{children:\"(Enter the password we created in the previous stage)\"})]}),/*#__PURE__*/ _jsx(\"h3\",{children:\"2.3: Connect to the server\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Once you've entered the above details hit save and tap on the Jupyter_notebook host to connect.\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Well done! \\xa0We're now connected to the server.\"}),/*#__PURE__*/ _jsx(\"h3\",{children:\"2.4: Install updates\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"One of the first things we need to do is to update the server to make sure we have the latest security patches. Enter the following commands one-by-one:\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"apt-get update\"})}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"apt-get upgrade\"})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,fluie35oyZZpJ5Pvuud6PMEbT8.png\",\"data-framer-height\":\"2048\",\"data-framer-width\":\"2732\",height:\"1024\",src:new URL(\"assets/fluie35oyZZpJ5Pvuud6PMEbT8.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"2732 / 2048\"},width:\"1366\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Typical SSH update screen\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Once you enter \",/*#__PURE__*/ _jsx(\"code\",{children:\"apt-get upgrade\"}),\" you will be prompted with a confirmation dialog just type \",/*#__PURE__*/ _jsx(\"code\",{children:\"Y\"}),\" and continue.\"]}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,E76hecljj4HI0QG5CpZkYJxusA.png\",\"data-framer-height\":\"1499\",\"data-framer-width\":\"2000\",height:\"749\",src:new URL(\"assets/E76hecljj4HI0QG5CpZkYJxusA.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"2000 / 1499\"},width:\"1000\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"just hit enter on your keybaord to continue\\xa0\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"You might also be prompted by a language selection screen for one of the updates as I was above.\"}),/*#__PURE__*/ _jsx(\"h2\",{children:\"Step 3: Install Python and Jupyter Notebooks\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Now that the system has been updated it's finally time to install python and Jupyter notebooks.\"}),/*#__PURE__*/ _jsx(\"h3\",{children:\"3.1: Install Python & Python-dev\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"First we should install python and python-dev as these are pre-requisites for everything we will be installing later, so type:\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"sudo apt install python3-pip python3-dev\"})}),/*#__PURE__*/ _jsx(\"h3\",{children:\"3.2: Update PIP\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Next lets update pip since we will be using it to update some packages\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"pip3 install --upgrade pip\"})}),/*#__PURE__*/ _jsx(\"h3\",{children:\"3.3: Install useful packages\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"I usually always begin by installing pandas, numpy, matplotlib and scrapy. But feel free to pick and choose the packages you'll find most useful\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"pip3 install pandas\"})}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"pip3 install numpy\"})}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"pip3 install matplotlib\"})}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"pip3 install scrapy\"})}),/*#__PURE__*/ _jsx(\"h3\",{children:\"3.4: Install Jupyter Notebooks\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"And finally lets install Jupyter notebooks\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"pip3 install jupyter\"})}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,kBtZoTJV9oNCSHGahIf8Era21k.png\",\"data-framer-height\":\"2048\",\"data-framer-width\":\"2732\",height:\"1024\",src:new URL(\"assets/kBtZoTJV9oNCSHGahIf8Era21k.png\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"2732 / 2048\"},width:\"1366\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"The terminal screen after install Python and other packages\\xa0\"}),/*#__PURE__*/ _jsx(\"h2\",{children:\"Step 4: Configuring jupyter notebooks\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Now that jupyter notebooks has been installed we need to configure it such that we are able to access it remotely.\"}),/*#__PURE__*/ _jsx(\"h3\",{children:\"4.1: Create a Jupyter Notebooks config file and edit\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Lets begin by generating a jupyter notebooks config file:\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"jupyter notebook --generate-config\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"This will create an editable configuration file. Lets use nano to edit this file:\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"sudo nano /root/.jupyter/jupyter_notebook_config.py\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"This will take you to the edit screen. Here you'll see that most lines are commented out, this means that these feautres are disabled in the default configuration. \\xa0\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Use \",/*#__PURE__*/ _jsx(\"code\",{children:\"ctrl+w\"}),\" and search for \",/*#__PURE__*/ _jsx(\"code\",{children:\"c.NotebookApp.ip\"}),\" once you have lcoated this line write the following under it:\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"c.NotebookApp.ip = '0.0.0.0'\"})}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Then type \",/*#__PURE__*/ _jsx(\"code\",{children:\"ctrl+x\"}),\" followed by \",/*#__PURE__*/ _jsx(\"code\",{children:\"Y\"}),\" to confirm the edit and exit\"]}),/*#__PURE__*/ _jsx(\"h3\",{children:\"4.2: Install and configure a firewall\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Next, we need to install a firewall so that we can allow external connections.\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"sudo apt-get install ufw\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"To allow connections to the Jupyter notebooks port enter:\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"sudo ufw allow 8888/tcp\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"Next, lets enable ssh, so that we can keep connecting via ssh\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"sudo ufw allow 22\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"Finally lets restart ssh to apply the changes\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"sudo ufw reload\"})}),/*#__PURE__*/ _jsx(\"h3\",{children:\"4.3: Set a Jupyter notebooks password\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Now that we have enabled remote connections we should setup a Jupyter notebooks password, so that we don't have to use token authentication which can be quite complex. To begin password setup type:\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"jupyter notebook password\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"You will be prompted to enter a password (note that there will be no visual feedback as you type, so just type in your password and enter).\"}),/*#__PURE__*/ _jsx(\"h3\",{children:\"4.4: Run Jupyter notebooks in the background\"}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Now to keep Jupyter notebooks running in the background even if our terminal session is halted we need to use \",/*#__PURE__*/ _jsx(\"code\",{children:\"tmux\"}),\" this will open a virtual terminal session so just type\"]}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"tmux\"})}),/*#__PURE__*/ _jsx(\"p\",{children:\"If we want to return to this session after exiting the terminal we just need to type\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"tmux attach\"})}),/*#__PURE__*/ _jsx(\"h3\",{children:\"4.5: Launch Jupyter notebooks\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Finally, we can launch jupyter notebooks using:\"}),/*#__PURE__*/ _jsx(\"p\",{children:/*#__PURE__*/ _jsx(\"code\",{children:\"jupyter notebook --allow-root --no-browser\"})}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Note: We're have been running everything as root since setting up the server which is not recomended which is why we need to use the \",/*#__PURE__*/ _jsx(\"code\",{children:\"--allow-root\"}),\" flag. Likewise since jupyter notebooks is typically run locally we need to use the \",/*#__PURE__*/ _jsx(\"code\",{children:\"--no-browser\"}),\" flag,\"]}),/*#__PURE__*/ _jsxs(\"p\",{children:[\"Finally, just navigate to \",/*#__PURE__*/ _jsx(\"code\",{children:\"http://your.ip.address.here:8888\"}),\" to log into your new server.\"]}),/*#__PURE__*/ _jsx(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,lmJibmY6PVSIuxcRpW8Y49NS4.jpeg\",\"data-framer-height\":\"376\",\"data-framer-width\":\"2000\",height:\"188\",src:new URL(\"assets/lmJibmY6PVSIuxcRpW8Y49NS4.jpeg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,style:{aspectRatio:\"2000 / 376\"},width:\"1000\"}),/*#__PURE__*/ _jsx(\"h2\",{children:\"Conclusion\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Finally, we're done! At the end of this tutorial, you should have a live Jupyter notebooks server that is accessible from anywhere with an internet connection. Remember to save your ssh login details and log in regularly to update packages and Linux itself.\"}),/*#__PURE__*/ _jsx(\"p\",{children:\"Keep in mind that while the above setup is quick, it is not ideal. Since we are running everything as root there is a risk some packages might become corrupted, so you might want to consider setting up a virtual environment. You might also want to add an SSL certificate to encrypt your connections. But since this tutorial is targetted at beginners I felt it was necessary to keep it as simple as possible. We will be adding more advanced tutorials in the near future.\"})]}),qmKEIZQOx:\"#FF5522\",V8PWfbvT8:\"use-jupyter-notebooks-anywhere\",vny2uxJff:{alt:\"Blue and red light digital wallpaper\",src:new URL(\"assets/aonjUSd8VqRYZTj9UMIVdwTUAcs.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href,srcSet:`${new URL(\"assets/512/aonjUSd8VqRYZTj9UMIVdwTUAcs.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 512w, ${new URL(\"assets/1024/aonjUSd8VqRYZTj9UMIVdwTUAcs.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 1024w, ${new URL(\"assets/2048/aonjUSd8VqRYZTj9UMIVdwTUAcs.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 2048w, ${new URL(\"assets/aonjUSd8VqRYZTj9UMIVdwTUAcs.jpg\",\"https://framerusercontent.com/modules/2GvWnayZ6QAAwwJt3UkA/TNrCEeFVWQYCgmxcoSuG/E7GHsAote.js\").href} 3840w`},ZckEhR3V3:\"Use Jupyter notebooks anywhere\"}];data.forEach(item=>Object.freeze(item));addPropertyControls(data,{ZckEhR3V3:{defaultValue:\"\",title:\"Title\",type:ControlType.String},V8PWfbvT8:{title:\"Slug\",type:ControlType.String},iP8mvmvMM:{title:\"Date\",type:ControlType.Date},Djh5_J2Mt:{defaultValue:\"\",title:\"Category\",type:ControlType.String},qmKEIZQOx:{defaultValue:\"rgb(0, 153, 255)\",title:\"Color\",type:ControlType.Color},vny2uxJff:{title:\"Image\",type:ControlType.ResponsiveImage},KbGlbG3Yd:{defaultValue:\"\",title:\"Content\",type:ControlType.RichText}});data[\"displayName\"]=\"Blog\";export default data;\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"data\",\"name\":\"data\",\"annotations\":{\"framerData\":\"\",\"framerRecordIdKey\":\"id\",\"framerContractVersion\":\"1\",\"framerSlug\":\"V8PWfbvT8\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}"],
  "mappings": "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",
  "names": ["data", "u", "x", "p", "Link", "item", "addPropertyControls", "ControlType", "E7GHsAote_default", "__FramerMetadata__"]
}
