.iloc[]
is primarily integer position based (from 0
to length-1
of the axis), but may also be used with a boolean array.
Allowed inputs are:
An integer, e.g. 5
.
A list or array of integers, e.g. [4, 3, 0]
.
A slice object with ints, e.g. 1:7
.
A boolean array.
A callable
function with one argument (the calling Series or DataFrame) and that returns valid output for indexing (one of the above). This is useful in method chains, when you don't have a reference to the calling object, but would like to base your selection on some value.
.iloc
will raise IndexError
if a requested indexer is out-of-bounds, except slice indexers which allow out-of-bounds indexing (this conforms with python/numpy slice semantics).
See more at Selection by Position <indexing.integer>
.
Purely integer-location based indexing for selection by position.
DataFrame.iat
Fast integer location scalar accessor.
DataFrame.loc
Purely label-location based indexer for selection by label.
Series.iloc
Purely integer-location based indexing for selection by position.
>>> mydict = [{'a': 1, 'b': 2, 'c': 3, 'd': 4},
... {'a': 100, 'b': 200, 'c': 300, 'd': 400},
... {'a': 1000, 'b': 2000, 'c': 3000, 'd': 4000 }]
... df = pd.DataFrame(mydict)
... df a b c d 0 1 2 3 4 1 100 200 300 400 2 1000 2000 3000 4000
Indexing just the rows
With a scalar integer.
This example is valid syntax, but we were not able to check execution>>> type(df.iloc[0]) <class 'pandas.core.series.Series'>This example is valid syntax, but we were not able to check execution
>>> df.iloc[0] a 1 b 2 c 3 d 4 Name: 0, dtype: int64
With a list of integers.
This example is valid syntax, but we were not able to check execution>>> df.iloc[[0]] a b c d 0 1 2 3 4This example is valid syntax, but we were not able to check execution
>>> type(df.iloc[[0]]) <class 'pandas.core.frame.DataFrame'>This example is valid syntax, but we were not able to check execution
>>> df.iloc[[0, 1]] a b c d 0 1 2 3 4 1 100 200 300 400
With a slice
object.
>>> df.iloc[:3] a b c d 0 1 2 3 4 1 100 200 300 400 2 1000 2000 3000 4000
With a boolean mask the same length as the index.
This example is valid syntax, but we were not able to check execution>>> df.iloc[[True, False, True]] a b c d 0 1 2 3 4 2 1000 2000 3000 4000
With a callable, useful in method chains. The :None:None:`x`
passed to the lambda
is the DataFrame being sliced. This selects the rows whose index label even.
>>> df.iloc[lambda x: x.index % 2 == 0] a b c d 0 1 2 3 4 2 1000 2000 3000 4000
Indexing both axes
You can mix the indexer types for the index and columns. Use :
to select the entire axis.
With scalar integers.
This example is valid syntax, but we were not able to check execution>>> df.iloc[0, 1] 2
With lists of integers.
This example is valid syntax, but we were not able to check execution>>> df.iloc[[0, 2], [1, 3]] b d 0 2 4 2 2000 4000
With slice
objects.
>>> df.iloc[1:3, 0:3] a b c 1 100 200 300 2 1000 2000 3000
With a boolean array whose length matches the columns.
This example is valid syntax, but we were not able to check execution>>> df.iloc[:, [True, False, True, False]] a c 0 1 3 1 100 300 2 1000 3000
With a callable function that expects the Series or DataFrame.
This example is valid syntax, but we were not able to check execution>>> df.iloc[:, lambda df: [0, 2]] a c 0 1 3 1 100 300 2 1000 3000See :
Hover to see nodes names; edges to Self not shown, Caped at 50 nodes.
Using a canvas is more power efficient and can get hundred of nodes ; but does not allow hyperlinks; , arrows or text (beyond on hover)
SVG is more flexible but power hungry; and does not scale well to 50 + nodes.
All aboves nodes referred to, (or are referred from) current nodes; Edges from Self to other have been omitted (or all nodes would be connected to the central node "self" which is not useful). Nodes are colored by the library they belong to, and scaled with the number of references pointing them