DataFrame.loc
Access a group of rows and columns by label(s)
danfo.DataFrame.loc(args) [source]
Parameters
Type
Description
Default
args
Object
{
rows: Array, labels, Boolean mask of row index
columns: Array, labels of column names
}
Returns:
return DataFrame

Examples

.loc() is label position based-from 0 to length-1 of the row axis.
Allowed inputs for are:
    An integer, e.g. "r1".
    A list or array of integers, e.g. ["a", "b", "d"].
    A boolean mask. E.g [ true, false, false ]
    A string slice object with ints, e.g. ['"a":"d"'], ["1:4"]
Note: only the start label is included, and the end label is ignored.
.loc will raise a ValueEror if a requested label is not found.

Index by specific rows and return all columns

If the row's index is specified and the columns are not, then it returns all columns and just the specified rows.
Node
Browser
1
const dfd = require("danfojs-node")
2
3
let data = { "Name": ["Apples", "Mango", "Banana", "Pear"],
4
"Count": [21, 5, 30, 10],
5
"Price": [200, 300, 40, 250] }
6
7
let df = new dfd.DataFrame(data, {index: ["a", "b", "c", "d"]})
8
df.print()
9
let sub_df = df.loc({rows: ["a", "c"]})
10
sub_df.print()
Copied!
1
Copied!
Output
1
2
╔═══╤═══════════════════╤═══════════════════╤═══════════════════╗
3
║ │ Name │ Count │ Price ║
4
╟───┼───────────────────┼───────────────────┼───────────────────╢
5
║ a │ Apples │ 21 │ 200 ║
6
╟───┼───────────────────┼───────────────────┼───────────────────╢
7
║ b │ Mango │ 5 │ 300 ║
8
╟───┼───────────────────┼───────────────────┼───────────────────╢
9
║ c │ Banana │ 30 │ 40 ║
10
╟───┼───────────────────┼───────────────────┼───────────────────╢
11
║ d │ Pear │ 10 │ 250 ║
12
╚═══╧═══════════════════╧═══════════════════╧═══════════════════╝
13
14
15
Shape: (2,3)
16
17
╔═══╤═══════════════════╤═══════════════════╤═══════════════════╗
18
║ │ Name │ Count │ Price ║
19
╟───┼───────────────────┼───────────────────┼───────────────────╢
20
║ a │ Apples │ 21 │ 200 ║
21
╟───┼───────────────────┼───────────────────┼───────────────────╢
22
║ c │ Banana │ 30 │ 40 ║
23
╚═══╧═══════════════════╧═══════════════════╧═══════════════════╝
Copied!

Index by a list of column names and return all rows

Node
Browser
1
const dfd = require("danfojs-node")
2
3
let data = { "Name": ["Apples", "Mango", "Banana", "Pear"],
4
"Count": [21, 5, 30, 10],
5
"Price": [200, 300, 40, 250] }
6
7
let df = new dfd.DataFrame(data, {index: ["a", "b", "c", "d"]})
8
df.print()
9
let sub_df = df.loc({columns: ["Count", "Price"]})
10
sub_df.print()
Copied!
1
Copied!
Output
1
╔═══╤═══════════════════╤═══════════════════╤═══════════════════╗
2
║ │ Name │ Count │ Price ║
3
╟───┼───────────────────┼───────────────────┼───────────────────╢
4
║ a │ Apples │ 21 │ 200 ║
5
╟───┼───────────────────┼───────────────────┼───────────────────╢
6
║ b │ Mango │ 5 │ 300 ║
7
╟───┼───────────────────┼───────────────────┼───────────────────╢
8
║ c │ Banana │ 30 │ 40 ║
9
╟───┼───────────────────┼───────────────────┼───────────────────╢
10
║ d │ Pear │ 10 │ 250 ║
11
╚═══╧═══════════════════╧═══════════════════╧═══════════════════╝
12
13
14
//after indexing
15
16
╔═══╤═══════════════════╤═══════════════════╗
17
║ │ Count │ Price ║
18
╟───┼───────────────────┼───────────────────╢
19
║ a │ 21 │ 200 ║
20
╟───┼───────────────────┼───────────────────╢
21
║ b │ 5 │ 300 ║
22
╟───┼───────────────────┼───────────────────╢
23
║ c │ 30 │ 40 ║
24
╟───┼───────────────────┼───────────────────╢
25
║ d │ 10 │ 250 ║
26
╚═══╧═══════════════════╧═══════════════════╝
Copied!

Index both axes by the specified labels

Node
Browser
1
const dfd = require("danfojs-node")
2
3
let data = { "Name": ["Apples", "Mango", "Banana", "Pear"],
4
"Count": [21, 5, 30, 10],
5
"Price": [200, 300, 40, 250] }
6
7
let df = new dfd.DataFrame(data, { index: ["a", "b", "c", "d"] })
8
df.print()
9
let sub_df = df.loc({ rows: ["c","d"], columns: ["Name", "Price"] })
10
sub_df.print()
Copied!
1
Copied!
Output
1
2
╔═══╤═══════════════════╤═══════════════════╤═══════════════════╗
3
║ │ Name │ Count │ Price ║
4
╟───┼───────────────────┼───────────────────┼───────────────────╢
5
║ a │ Apples │ 21 │ 200 ║
6
╟───┼───────────────────┼───────────────────┼───────────────────╢
7
║ b │ Mango │ 5 │ 300 ║
8
╟───┼───────────────────┼───────────────────┼───────────────────╢
9
║ c │ Banana │ 30 │ 40 ║
10
╟───┼───────────────────┼───────────────────┼───────────────────╢
11
║ d │ Pear │ 10 │ 250 ║
12
╚═══╧═══════════════════╧═══════════════════╧═══════════════════╝
13
14
15
//after slicing
16
17
╔═══╤═══════════════════╤═══════════════════╗
18
║ │ Name │ Price ║
19
╟───┼───────────────────┼───────────────────╢
20
║ c │ Banana │ 40 ║
21
╟───┼───────────────────┼───────────────────╢
22
║ d │ Pear │ 250 ║
23
╚═══╧═══════════════════╧═══════════════════╝
Copied!

Index by a slice of row

The loc function also accepts string slices of the form [start: end], e.g [`"a":"c"`]. This will return all values from label positions a to c.
Node
Browser
1
const dfd = require("danfojs-node")
2
3
let data = { "Name": ["Apples", "Mango", "Banana", "Pear"],
4
"Count": [21, 5, 30, 10],
5
"Price": [200, 300, 40, 250] }
6
7
let df = new dfd.DataFrame(data, { index: ["a", "b", "c", "d"] })
8
df.print()
9
let sub_df = df.loc({ rows: [`"a":"c"`], columns: ["Name", "Price"] })
10
sub_df.print()
Copied!
1
Copied!
Output
1
╔════════════╤═══════════════════╤═══════════════════╤═══════════════════╗
2
║ │ Name │ Count │ Price ║
3
╟────────────┼───────────────────┼───────────────────┼───────────────────╢
4
║ a │ Apples │ 21 │ 200 ║
5
╟────────────┼───────────────────┼───────────────────┼───────────────────╢
6
║ b │ Mango │ 5 │ 300 ║
7
╟────────────┼───────────────────┼───────────────────┼───────────────────╢
8
║ c │ Banana │ 30 │ 40 ║
9
╟────────────┼───────────────────┼───────────────────┼───────────────────╢
10
║ d │ Pear │ 10 │ 250 ║
11
╚════════════╧═══════════════════╧═══════════════════╧═══════════════════╝
12
13
╔════════════╤═══════════════════╤═══════════════════╗
14
║ │ Name │ Price ║
15
╟────────────┼───────────────────┼───────────────────╢
16
║ a │ Apples │ 200 ║
17
╟────────────┼───────────────────┼───────────────────╢
18
║ b │ Mango │ 300 ║
19
╚════════════╧═══════════════════╧═══════════════════╝
Copied!
Note that when using loc with alphabetic slices. We expect you to pass labels in the correct format. That is, string labels must be explicitly quoted. For example, the following loc slice will throw an error: df.loc({ row: [a:e]}).print() For the slice above to work, you must quote each slice, e.g: df.loc({ row: [`"a":"e"`]}).print() Inner quotes are not needed for numeric indices!

Slice DataFrame rows by boolean condition

Node
1
const dfd = require("danfojs-node")
2
3
let data = {
4
"Name": ["Apples", "Mango", "Banana", "Pear"],
5
"Count": [21, 5, 30, 10],
6
"Price": [200, 300, 40, 250]
7
}
8
9
let df = new dfd.DataFrame(data, { index: ["a", "b", "c", "d"] })
10
let sub_df = df.loc({ rows: df["Count"].gt(6) })
11
sub_df.print()
Copied!
1
╔════════════╤═══════════════════╤═══════════════════╤═══════════════════╗
2
║ │ Name │ Count │ Price ║
3
╟────────────┼───────────────────┼───────────────────┼───────────────────╢
4
║ a │ Apples │ 21 │ 200 ║
5
╟────────────┼───────────────────┼───────────────────┼───────────────────╢
6
║ c │ Banana │ 30 │ 40 ║
7
╟────────────┼───────────────────┼───────────────────┼───────────────────╢
8
║ d │ Pear │ 10 │ 250 ║
9
╚════════════╧═══════════════════╧═══════════════════╧═══════════════════╝
10
11
Copied!

Slice DataFrame rows by multiple boolean conditions

By design, you can chain as many boolean logic as possible, as long as they resolve to a Boolean array of the same length as the DataFrame.
Node
1
const dfd = require("danfojs-node")
2
3
let data = {
4
"Name": ["Apples", "Mango", "Banana", "Pear"],
5
"Count": [21, 5, 30, 10],
6
"Price": [200, 300, 40, 250]
7
}
8
9
let df = new dfd.DataFrame(data, { index: ["a", "b", "c", "d"] })
10
let condition = df["Count"].gt(6).and(df["Price"].lt(250))
11
let sub_df = df.loc({ rows: condition })
12
sub_df.print()
Copied!
1
╔════════════╤═══════════════════╤═══════════════════╤═══════════════════╗
2
║ │ Name │ Count │ Price ║
3
╟────────────┼───────────────────┼───────────────────┼───────────────────╢
4
║ a │ Apples │ 21 │ 200 ║
5
╟────────────┼───────────────────┼───────────────────┼───────────────────╢
6
║ c │ Banana │ 30 │ 40 ║
7
╚════════════╧═══════════════════╧═══════════════════╧═══════════════════╝
8
Copied!

Slice DataFrame with boolean mask

You can index a DataFrame with an array of boolean values as long as they resolve to an array of the same length as the DataFrame.
Node
1
const dfd = require("danfojs-node")
2
3
let data = {
4
"Name": ["Apples", "Mango", "Banana", "Pear"],
5
"Count": [21, 5, 30, 10],
6
"Price": [200, 300, 40, 250]
7
}
8
9
let df = new dfd.DataFrame(data, { index: ["a", "b", "c", "d"] })
10
11
let sub_df = df.loc({ rows: [false, true, true, true] })
12
sub_df.print()
Copied!
1
╔════════════╤═══════════════════╤═══════════════════╤═══════════════════╗
2
║ │ Name │ Count │ Price ║
3
╟────────────┼───────────────────┼───────────────────┼───────────────────╢
4
║ b │ Mango │ 5 │ 300 ║
5
╟────────────┼───────────────────┼───────────────────┼───────────────────╢
6
║ c │ Banana │ 30 │ 40 ║
7
╟────────────┼───────────────────┼───────────────────┼───────────────────╢
8
║ d │ Pear │ 10 │ 250 ║
9
╚════════════╧═══════════════════╧═══════════════════╧═══════════════════╝
10
11
Copied!
Last modified 17d ago