1(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[477],{8630:function(e,r,s){(window.__NEXT_P=window.__NEXT_P||[]).push(["/changelog",function(){return s(2990)}])},2990:function(e,r,s){"use strict";s.r(r),s.d(r,{__toc:function(){return o},default:function(){return d}});var n=s(5893),a=s(2673),t=s(2643),i={src:"/_next/static/media/breadroll-0.5.0.3c0182e8.png",height:1185,width:2094,blurDataURL:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAMAAABPT11nAAAABlBMVEUFBQUVFhgfjRskAAAACXBIWXMAACE4AAAhOAFFljFgAAAAFUlEQVR4nGNgQAaMYAIMwAyYEBQAAAEGAAutCc8OAAAAAElFTkSuQmCC",blurWidth:8,blurHeight:5},l={src:"/_next/static/media/breadroll-0.4.0.0806194c.png",height:790,width:1396,blurDataURL:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAMAAABPT11nAAAAElBMVEUDAgIUFRcxNj8LCwwmKCuSkpKG6G8KAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAI0lEQVR4nCXEsQHAQBACINTL/iuneAr0QjuzLC3uO2LSwJsfBf0ANlGGSa8AAAAASUVORK5CYII=",blurWidth:8,blurHeight:5};let o=[{depth:3,value:"0.5.0",id:"050"},{depth:3,value:"0.4.0",id:"040"},{depth:3,value:"0.3.7-alpha",id:"037-alpha"},{depth:3,value:"0.3.6-alpha",id:"036-alpha"},{depth:3,value:"0.3.1",id:"031"},{depth:3,value:"0.3.0",id:"030"},{depth:3,value:"0.2.0",id:"020"},{depth:3,value:"0.1.3",id:"013"},{depth:3,value:"0.1.0",id:"010"}];function c(e){let r=Object.assign({h3:"h3",p:"p",img:"img",strong:"strong",ul:"ul",li:"li",a:"a",code:"code",hr:"hr",pre:"pre",span:"span"},(0,t.a)(),e.components);return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(r.h3,{id:"050",children:"0.5.0"}),"\n",(0,n.jsx)("small",{className:"mb-5 block",children:"May 22, 2024"}),"\n",(0,n.jsx)(r.p,{children:(0,n.jsx)(r.img,{placeholder:"blur",src:i})}),"\n",(0,n.jsxs)(r.p,{children:["breadroll is now in ",(0,n.jsx)(r.strong,{children:"public beta"}),". We are super excited to see breadroll in the wild and even more excited to see contribution from the future breadroll community. So many thing are packed into the new breadroll. We have leveraged TypeScript's static typing to prevent data-related runtime errors, improved developer experience, improved API design, and added a few more powerful methods."]}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsxs)(r.p,{children:["A brand new parser experience utilizing ",(0,n.jsx)(r.a,{href:"https://github.com/mafintosh/csv-parser",children:"mafintosh/csv-parser"})," via ",(0,n.jsx)(r.a,{href:"https://github.com/sindresorhus/neat-csv",children:"sindresorhus/neat-csv"})," see the former for the default behavior of the parser."]}),"\n"]}),"\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsxs)(r.p,{children:["Now breadroll Dataframes have types; assign types by using the ",(0,n.jsx)(r.code,{children:".open"})," methods like so; ",(0,n.jsx)(r.code,{children:"Breadroll.open.local<T>()"})," or directly like so; ",(0,n.jsx)(r.code,{children:"new Dataframe<T>()"})]}),"\n"]}),"\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsx)(r.p,{children:"We added more methods to the Dataframe class"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsx)(r.li,{children:(0,n.jsx)(r.code,{children:".concat"})}),"\n",(0,n.jsx)(r.li,{children:(0,n.jsx)(r.code,{children:".merge"})}),"\n",(0,n.jsx)(r.li,{children:(0,n.jsx)(r.code,{children:".shape"})}),"\n",(0,n.jsx)(r.li,{children:(0,n.jsx)(r.code,{children:".tail"})}),"\n",(0,n.jsx)(r.li,{children:(0,n.jsx)(r.code,{children:".toNumber"})}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsxs)(r.p,{children:["We modified the ",(0,n.jsx)(r.code,{children:"Breadroll.open"})," methods to have a dedicated seperator or delimiter function parameter, this way we reduce the number of instances need to open multiple file with different formats; eg. ",(0,n.jsx)(r.code,{children:'Breadroll.open.local<T>("./path/to/file.csv", ",")'}),"."]}),"\n",(0,n.jsxs)(r.p,{children:["This simply means we've moved the delimiter from ",(0,n.jsx)(r.code,{children:"Breadroll.DataframeReadOptions"})," to each individual method."]}),"\n"]}),"\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsxs)(r.p,{children:["breadroll being in public beta means you get to build the future of breadroll, want to fix a bug, request a feature, improve testing; now is the time - take a quick glance on how to ",(0,n.jsx)(r.a,{href:"/contribution",children:"get started with contributing"})," to breadroll"]}),"\n"]}),"\n",(0,n.jsxs)(r.li,{children:["\n",(0,n.jsx)(r.p,{children:"67 \uD83C\uDF20 stars on GitHub, thank you so much for the support - help breadroll rise even higher, drop a star."}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(r.hr,{}),"\n",(0,n.jsx)(r.h3,{id:"040",children:"0.4.0"}),"\n",(0,n.jsx)("small",{className:"mb-5 block",children:"February 14, 2024"}),"\n",(0,n.jsx)(r.p,{children:(0,n.jsx)(r.img,{placeholder:"blur",src:l})}),"\n",(0,n.jsxs)(r.p,{children:["In breadroll's new version ",(0,n.jsx)(r.strong,{children:"0.4.0"})," a lot of new shiny features are introduced, Here are the cool new features"]}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:["Improvements to the ",(0,n.jsx)(r.code,{children:"Breadroll"})," and the ",(0,n.jsx)(r.code,{children:"Dataframe"})," API"]}),"\n",(0,n.jsx)(r.li,{children:"Introduction of a new remote data source"}),"\n",(0,n.jsx)(r.li,{children:"Changed filter keywords in favor of symbols over length words"}),"\n",(0,n.jsx)(r.li,{children:"A snazzy new way to perform data transformation"}),"\n",(0,n.jsxs)(r.li,{children:["Introuducing ",(0,n.jsx)(r.code,{children:"NumericConstants"})," - a collection of mathematical and physical constants"]}),"\n",(0,n.jsx)(r.li,{children:"breadroll hit 35 \uD83C\uDF20 stars on GitHub - help breadroll rise higher, drop a \uD83C\uDF20 star."}),"\n"]}),"\n",(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"API Improvements"})}),"\n",(0,n.jsxs)(r.p,{children:["The ",(0,n.jsx)(r.code,{children:"Breadroll"})," & ",(0,n.jsx)(r.code,{children:"Dataframe"})," APIs got a little face lift, with two major addition to the ",(0,n.jsx)(r.code,{children:"Breadroll"})," API and a few more others to the ",(0,n.jsx)(r.code,{children:"Dataframe"})," API;"]}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.code,{children:"DataframeReadOptions?.parseNumber: boolean"})," - This is an optional property that allows you to opt out of parsing numbers defaults to ",(0,n.jsx)(r.code,{children:"true"}),", when set to ",(0,n.jsx)(r.code,{children:"false"})," all values are returned as strings"]}),"\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.code,{children:"DataframeReadOptions?.supabase: SupabaseClient"})," - This is an optional property takes in the Supabase client created via ",(0,n.jsx)(r.code,{children:"createClient(..., ...)"}),", this property enables ",(0,n.jsx)(r.code,{children:"Breadroll.open.supabaseStorage"})," method."]}),"\n",(0,n.jsx)(r.li,{children:"By default headers (labels) were being converted to lower-case, now headers (labels) maintain case-sensitivity"}),"\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.code,{children:"Dataframe.apply({...}: Apply)"})," - This function allows you to perform data transformation on a specified column of the dataframe"]}),"\n"]}),"\n",(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"New Remote Data Source \uD83D\uDE80 - Supabase"})}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.code,{children:"Breadroll.open.supabaseStorage(bucketName: string, filepath: string)"})," - This function takes in the bucket name and filepath of the file, downloads the file, parses the files and retuns a Dataframe"]}),"\n"]}),"\n",(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"Symbol-based Filter Keywords"})}),"\n",(0,n.jsxs)(r.p,{children:["The use of symbols as keyword ensurces less verbosity; most of the filter keywords have been replaced with symbols; ",(0,n.jsx)(r.code,{children:'"eqauls"'})," is now ",(0,n.jsx)(r.code,{children:'"=="'})," see the full changes ",(0,n.jsx)(r.a,{href:"/docs/Dataframe/filter/",children:"here"})]}),"\n",(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"Numeric Constants"})}),"\n",(0,n.jsxs)(r.p,{children:["In addition to having the ability to perform data transformation using ",(0,n.jsx)(r.code,{children:"Dataframe.apply({...})"}),", the numeric constant object provides mathematical (",(0,n.jsx)(r.code,{children:"math"}),") and physical (",(0,n.jsx)(r.code,{children:"physical"}),") constants. These two can be nicely paired to make cool data transformation, most especially with scientific datasets."]}),"\n",(0,n.jsxs)(r.p,{children:["These values are double-precision 64-bit binary format IEEE 754 value, which have \xb115 decimal digits of precision. The ",(0,n.jsx)(r.code,{children:"physical"})," constant are provided in their standard SI units"]}),"\n",(0,n.jsx)(r.hr,{}),"\n",(0,n.jsx)(r.h3,{id:"037-alpha",children:"0.3.7-alpha"}),"\n",(0,n.jsx)("small",{children:"January 31st, 2024"}),"\n",(0,n.jsxs)(r.p,{children:["In breadroll's new version ",(0,n.jsx)(r.strong,{children:"0.3.7-alpha"})," two new features are introduced, Here are the cool new features"]}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:["Regex filter using ",(0,n.jsx)(r.code,{children:'"matches"'})," keyword"]}),"\n",(0,n.jsx)(r.li,{children:"Integer-based indexing / selection"}),"\n"]}),"\n",(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"Regex filter"})}),"\n",(0,n.jsxs)(r.p,{children:["Introducing Regex filter with the keyword ",(0,n.jsx)(r.code,{children:'"matches"'})," for performing complex queries like matching certain patterns in a ",(0,n.jsx)(r.code,{children:"String"}),", this uses the ",(0,n.jsx)(r.code,{children:"matches"})," keyword and takes in a ",(0,n.jsx)(r.a,{href:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp",children:(0,n.jsx)(r.code,{children:"RegExp"})}),". We recommend using this filter when a trade off on time is acceptable, see ",(0,n.jsx)(r.a,{href:"/docs/Dataframe/filter#regex-filter",children:"here"})," for a more detailed explanation."]}),"\n",(0,n.jsx)(r.pre,{"data-language":"typescript","data-theme":"default",children:(0,n.jsx)(r.code,{"data-language":"typescript","data-theme":"default",children:(0,n.jsxs)(r.span,{className:"line",children:[(0,n.jsx)(r.span,{style:{color:"var(--shiki-token-keyword)"},children:"const"}),(0,n.jsx)(r.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,n.jsx)(r.span,{style:{color:"var(--shiki-token-constant)"},children:"filtered"}),(0,n.jsx)(r.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,n.jsx)(r.span,{style:{color:"var(--shiki-token-keyword)"},children:"="}),(0,n.jsx)(r.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,n.jsx)(r.span,{style:{color:"var(--shiki-token-constant)"},children:"selected_cols"}),(0,n.jsx)(r.span,{style:{color:"var(--shiki-token-function)"},children:".filter"}),(0,n.jsx)(r.span,{style:{color:"var(--shiki-color-text)"},children:"("}),(0,n.jsx)(r.span,{style:{color:"var(--shiki-token-string-expression)"},children:'"job_title"'}),(0,n.jsx)(r.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,n.jsx)(r.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,n.jsx)(r.span,{style:{color:"var(--shiki-token-string-expression)"},children:'"matches"'}),(0,n.jsx)(r.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,n.jsx)(r.span,{style:{color:"var(--shiki-token-string-expression)"},children:" /engineer/"}),(0,n.jsx)(r.span,{style:{color:"var(--shiki-token-keyword)"},children:"i"}),(0,n.jsx)(r.span,{style:{color:"var(--shiki-color-text)"},children:");"})]})})}),"\n",(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"Integer-based indexing / selection"})}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"Dataframe.rows({start?: number, end?: number}: Indexer): Dataframe"})," Returns a specific number of rows of the dataframe, this function takes an object with either the start or the end index and return the dataframe with the specified number of rows - check it out ",(0,n.jsx)(r.a,{href:"/reference/Dataframe/rows/",children:"here"})]}),"\n",(0,n.jsx)(r.pre,{"data-language":"typescript","data-theme":"default",children:(0,n.jsx)(r.code,{"data-language":"typescript","data-theme":"default",children:(0,n.jsxs)(r.span,{className:"line",children:[(0,n.jsx)(r.span,{style:{color:"var(--shiki-token-keyword)"},children:"const"}),(0,n.jsx)(r.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,n.jsx)(r.span,{style:{color:"var(--shiki-token-constant)"},children:"count"}),(0,n.jsx)(r.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,n.jsx)(r.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,n.jsx)(r.span,{style:{color:"var(--shiki-token-function)"},children:"Dataframe"}),(0,n.jsx)(r.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,n.jsx)(r.span,{style:{color:"var(--shiki-token-keyword)"},children:"="}),(0,n.jsx)(r.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,n.jsx)(r.span,{style:{color:"var(--shiki-token-constant)"},children:"df"}),(0,n.jsx)(r.span,{style:{color:"var(--shiki-token-function)"},children:".rows"}),(0,n.jsx)(r.span,{style:{color:"var(--shiki-color-text)"},children:"({ start"}),(0,n.jsx)(r.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,n.jsx)(r.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,n.jsx)(r.span,{style:{color:"var(--shiki-token-constant)"},children:"0"}),(0,n.jsx)(r.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,n.jsx)(r.span,{style:{color:"var(--shiki-color-text)"},children:" end"}),(0,n.jsx)(r.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,n.jsx)(r.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,n.jsx)(r.span,{style:{color:"var(--shiki-token-constant)"},children:"4"}),(0,n.jsx)(r.span,{style:{color:"var(--shiki-color-text)"},children:" });"})]})})}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"Dataframe.cols({start?: number, end?: number}: Indexer): Dataframe"})," Returns specific columns of the dataframe strictly using interger based indexing similar to panda's ",(0,n.jsx)(r.code,{children:"iloc"})," - check it out ",(0,n.jsx)(r.a,{href:"/reference/Dataframe/cols/",children:"here"})]}),"\n",(0,n.jsx)(r.pre,{"data-language":"typescript","data-theme":"default",children:(0,n.jsx)(r.code,{"data-language":"typescript","data-theme":"default",children:(0,n.jsxs)(r.span,{className:"line",children:[(0,n.jsx)(r.span,{style:{color:"var(--shiki-token-keyword)"},children:"const"}),(0,n.jsx)(r.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,n.jsx)(r.span,{style:{color:"var(--shiki-token-constant)"},children:"count"}),(0,n.jsx)(r.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,n.jsx)(r.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,n.jsx)(r.span,{style:{color:"var(--shiki-token-function)"},children:"Dataframe"}),(0,n.jsx)(r.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,n.jsx)(r.span,{style:{color:"var(--shiki-token-keyword)"},children:"="}),(0,n.jsx)(r.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,n.jsx)(r.span,{style:{color:"var(--shiki-token-constant)"},children:"df"}),(0,n.jsx)(r.span,{style:{color:"var(--shiki-token-function)"},children:".cols"}),(0,n.jsx)(r.span,{style:{color:"var(--shiki-color-text)"},children:"({ start"}),(0,n.jsx)(r.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,n.jsx)(r.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,n.jsx)(r.span,{style:{color:"var(--shiki-token-constant)"},children:"0"}),(0,n.jsx)(r.span,{style:{color:"var(--shiki-token-punctuation)"},children:","}),(0,n.jsx)(r.span,{style:{color:"var(--shiki-color-text)"},children:" end"}),(0,n.jsx)(r.span,{style:{color:"var(--shiki-token-keyword)"},children:":"}),(0,n.jsx)(r.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,n.jsx)(r.span,{style:{color:"var(--shiki-token-constant)"},children:"4"}),(0,n.jsx)(r.span,{style:{color:"var(--shiki-color-text)"},children:" });"})]})})}),"\n",(0,n.jsx)(r.hr,{}),"\n",(0,n.jsx)(r.h3,{id:"036-alpha",children:"0.3.6-alpha"}),"\n",(0,n.jsx)("small",{children:"January 25th, 2024"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"Breadroll.open.https(url: string, headers?: Headers): Promise<Dataframe>"})," This functio
1n fetches and return a file via a URL over https, with a default ",(0,n.jsx)(r.code,{children:"GET"})," method, with optional provision for custom headers"]}),"\n",(0,n.jsx)(r.hr,{}),"\n",(0,n.jsx)(r.h3,{id:"031",children:"0.3.1"}),"\n",(0,n.jsx)("small",{children:"January 20th, 2024"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"Dataframe.select(keys: Array<string>): Dataframe"})," This function return a new Dataframe with only the desired rows, ie. rows with the specified labels"]}),"\n",(0,n.jsx)(r.hr,{}),"\n",(0,n.jsx)(r.h3,{id:"030",children:"0.3.0"}),"\n",(0,n.jsx)("small",{children:"January 19th, 2024"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:'Dataframe.to_blob(filetype: "csv" | "tsv"): Blob'})," This function converts the current dataframe into a Blob of MIME filetype ",(0,n.jsx)(r.code,{children:'"csv" | "tsv"'})]}),"\n",(0,n.jsx)(r.p,{children:(0,n.jsx)(r.code,{children:"Dataframe.save"})}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.code,{children:".json(filepath: string)"}),": This function saves ",(0,n.jsx)(r.code,{children:"Dataframe"})," as a JSON files ie. for example ",(0,n.jsx)(r.code,{children:"Dataframe.save.json(filepath: string)"}),"."]}),"\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.code,{children:".csv(filepath: string)"}),": This function saves ",(0,n.jsx)(r.code,{children:"Dataframe"})," as a CSV files ie. for example ",(0,n.jsx)(r.code,{children:"Dataframe.save.csv(filepath: string)"}),"."]}),"\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.code,{children:".tsv(filepath: string)"}),": This function saves ",(0,n.jsx)(r.code,{children:"Dataframe"})," as a TSV files ie. for example ",(0,n.jsx)(r.code,{children:"Dataframe.save.tsv(filepath: string)"}),"."]}),"\n"]}),"\n",(0,n.jsx)(r.hr,{}),"\n",(0,n.jsx)(r.h3,{id:"020",children:"0.2.0"}),"\n",(0,n.jsx)("small",{children:"Sept 15th, 2023"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"Dataframe.min(key: string): number"})," This function returns the minimum value of all the values of the specified column ie. key. Note, the values are coerse into a number type"]}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"Dataframe.max(key: string): number"})," This function returns the maximum value of all the values of the specified column ie. key. Note, the values are coerse into a number type"]}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"Dataframe.sum(key: string): number"})," This function returns the sum of all the values of the specified column ie. key. Note, the values are coerse into a number type"]}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"Dataframe.average(key: string): number"})," This function returns the average of all the values of the specified column ie. key. Note, the values are coerse into a number type"]}),"\n",(0,n.jsx)(r.hr,{}),"\n",(0,n.jsx)(r.h3,{id:"013",children:"0.1.3"}),"\n",(0,n.jsx)("small",{children:"Aug 27th, 2023"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"Dataframe.use(callback: (dataframe: Array<Record<string, unknown>>) => Dataframe): Dataframe"})," it provides access to the object ie. it kinda ejects from the base class allowing user to perform their own custom operation on a the current dataframe version, eg. after running ",(0,n.jsx)(r.code,{children:"Dataframe.filter"})]}),"\n",(0,n.jsxs)(r.p,{children:["Added more filters, ",(0,n.jsx)(r.code,{children:"greater than or equal to"}),", ",(0,n.jsx)(r.code,{children:"less than or equal to"}),", ",(0,n.jsx)(r.code,{children:"is between"})]}),"\n",(0,n.jsxs)(r.p,{children:["Tweaked ",(0,n.jsx)(r.code,{children:"Dataframe.filter"})," to take a fourth and optional argument ",(0,n.jsx)(r.code,{children:"limit"})," for range filters like ",(0,n.jsx)(r.code,{children:"is between"})]}),"\n",(0,n.jsx)(r.hr,{}),"\n",(0,n.jsx)(r.h3,{id:"010",children:"0.1.0"}),"\n",(0,n.jsx)("small",{children:"Aug 19th, 2023"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.code,{children:"Dataframe.head: Dataframe"})," returns the first five rows of the dataframe"]}),"\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.code,{children:"Dataframe.labels: Array<string>"})," returns the labels of the dataframe"]}),"\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.code,{children:"Dataframe.filter(key: string, filter: Condition, value: unknown)"})," - filters the rows in ",(0,n.jsx)(r.code,{children:"Dataframe"})," and returns ",(0,n.jsx)(r.code,{children:"Dataframe(dataframe)"})]}),"\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.code,{children:"Dataframe.value"})," - exposes the ",(0,n.jsx)(r.code,{children:"Dataframe"}),"'s dataframe as ",(0,n.jsx)(r.code,{children:"Array<Record<string, unknown>>"})]}),"\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.code,{children:"Dataframe.count"})," - returns the count of rows in the dataframe or dataframe object"]}),"\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.code,{children:"Dataframe.isNull"})," - returns all the rows that have some properties equal to ",(0,n.jsx)(r.code,{children:"null"})]}),"\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.code,{children:"Dataframe.notNull"})," - returns all the rows that have every property equal to ",(0,n.jsx)(r.code,{children:"!null"})]}),"\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.code,{children:"Dataframe.dtypes"})," - returns all the data types of all the columns in the dataframe"]}),"\n"]})]})}var d=(0,a.j)({MDXContent:function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{wrapper:r}=Object.assign({},(0,t.a)(),e.components);return r?(0,n.jsx)(r,{...e,children:(0,n.jsx)(c,{...e})}):c(e)},pageOpts:{filePath:"pages/changelog.mdx",route:"/changelog",frontMatter:{title:"Changelog",description:"breadroll is now in public beta. We are super excited to see breadroll in the wild and even more excited to see contribution from the future breadroll community. So many thing are packed into the new breadroll",og:"png/breadroll-0.5.0.png"},timestamp:1720272596e3,title:"Changelog",headings:o},pageNextRoute:"/changelog"})}},function(e){e.O(0,[673,888,774,179],function(){return e(e.s=8630)}),_N_E=e.O()}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.