Mysterious Otter
Mysterious Otter

Reputation: 4067

What is the difference between these two Python pandas dataframe commands?

Let's say I have an empty pandas dataframe.

import pandas as pd
m = pd.DataFrame(index=range(1,100), columns=range(1,100))
m = m.fillna(0)

What is the difference between the following two commands?

m[2][1]
m[2].ix[1] # This code actually allows you to edit the dataframe

Feel free to provide further reading if it would be helpful for future reference.

Upvotes: 2

Views: 165

Answers (1)

JohnE
JohnE

Reputation: 30444

The short answer is that you probably shouldn't do either of these (see @EdChum's link for the reason):

m[2][1]
m[2].ix[1]

You should generally use a single ix, iloc, or loc command on the entire dataframe anytime you want access by both row and column -- not a sequential column access, followed by row access as you did here. For example,

m.iloc[1,2]

Note that the 1 and 2 are reversed compared to your example because ix/iloc/loc all use standard syntax of row then column. Your syntax is reversed because you are chaining, and are first selecting a column from a dataframe (which is a series) and then selecting a row from that series.

In simple cases like yours, it often won't matter too much but the usefulness of ix/iloc/loc is that they are designed to let you "edit" the dataframe in complex ways (aka set or assign values).

There is a really good explanation of ix/iloc/loc here:

pandas iloc vs ix vs loc explanation?

and also in standard pandas documentation:

http://pandas.pydata.org/pandas-docs/stable/indexing.html

Upvotes: 3

Related Questions