python dataframe

In python, you have many ways to represent a 2-dimensional array. You can use list like:[[1,2],[3,4],[5,6]], you can use ndarray in numpy like:numpy.array([[1,2],[3,4],[5,6]]), you can also use dataframe in the Pandas package:DataFrame([[1,2],[3,4],[5,6]]). All these represent a 2-dimensional array of 3 rows and 2 columns.

But a DataFrame object has other attributes that list/ndarray do not have. A DataFrame object has an index attribute that is the names of rows. A DataFrame object has also a columns attribute that is the names(or labels) of columns. The actual data is stored in DataFrame object’s values attribute. So the standard constructor of DataFrame is:

from pandas import DataFrame

frame = DataFrame(data=[[1,2],[3,4],[5,6]],index=['row1','row2','row3'],columns=['col1','col2'])

print(frame)

print(frame.index)

print(frame.columns)

print(frame.values)

      col1  col2
row1     1     2
row2     3     4
row3     5     6
Index(['row1', 'row2', 'row3'], dtype='object')
Index(['col1', 'col2'], dtype='object')
[[1 2]
 [3 4]
 [5 6]]

If you do not give the index and columns when constructing a DataFrame object, its index attribute is defaulted to [0,1,2,…], and its columns attribute is also defaulted to [0,1,2,…].

from pandas import DataFrame

frame = DataFrame([[1,2],[3,4],[5,6]])

print(frame)

print(frame.index)

print(frame.columns)

print(frame.values)

   0  1
0  1  2
1  3  4
2  5  6
RangeIndex(start=0, stop=3, step=1)
RangeIndex(start=0, stop=2, step=1)
[[1 2]
 [3 4]
 [5 6]]

How to access elements in two dimensional arrays? We know we can use obj[i][j] to access an element in a list or ndarray(we can also use obj[i,j] to access an element in ndarray). We can also use obj[columnname][rowname] to access the elements in a DataFrame object. Note the difference between list/ndarray and DataFrame: the order of column name and row name is reversed. To keep the convention that column name comes after row name, you can use obj.loc[rowname][columnname]. You can also use obj.iloc[rownumber][columnnumber] to denote an element in a DataFrame object even the DataFrame obj has customized columns/index attributes(the rownumber/columnnumber start from 0).

We can not only get the individual elements in a DataFrame object, but also a whole row/column in it. To get a column, use frame[columnname] or frame.columnname. The result is like a Pandas Series object: an array plus an index. You can get multiple columns using frame[[columname1,columnname2,…]]. Notice the double square brackets. Multiple column names must be put into a list and the list is put into the top level square bracket. You can not just put multiple column labels into a single square bracket to obtain multiple columns because the [] operator of DataFrame only takes one parameter. To get a row, you can not use frame[rowname], because that is used to get a column, and because rowname is not a column name, it will generate an error. You must use frame[:rownumber+1] to get row rownumber. Even the DataFrame object has a customized index, you still need to use the row number not the row name/label to get the whole row. On the other hand, you cannot use frame[columnnumber] to get a column if the DataFrame object has already a customized columns attribute.

From the above discussion, it seems accessing a row is more difficult than accessing a column for DataFrame. You cannot use row name, and you need to write a colon when using row number. That is because [] operator of DataFrame is mainly designed for accessing columns rather than rows. On the contrary, DataFrame.loc mostly serves for rows. frame.loc[rowname] is used to get a whole row. If you want to get multiple rows, you need to put row names into a list like frame.loc[[rowname1,rowname2]].   frame.loc and DataFrame.iloc[] operator can have multiple parameters. But you need to pay attention to the meaning of the parameters in []. frame.iloc[1,2] gets the element at row 1 and column 2, while frame.iloc[[1,2]] gets whole row 1 and whole row 2.

DataFrame[] can also take a Boolean Series as its parameter. The rows whose corresponding value in the series are false are eliminated from the result.

 

 

Did you like this?
Tip admin with Cryptocurrency

Donate Bitcoin to admin

Scan to Donate Bitcoin to admin
Scan the QR code or copy the address below into your wallet to send some bitcoin:

Donate Bitcoin Cash to admin

Scan to Donate Bitcoin Cash to admin
Scan the QR code or copy the address below into your wallet to send bitcoin:

Donate Ethereum to admin

Scan to Donate Ethereum to admin
Scan the QR code or copy the address below into your wallet to send some Ether:

Donate Litecoin to admin

Scan to Donate Litecoin to admin
Scan the QR code or copy the address below into your wallet to send some Litecoin:

Donate Monero to admin

Scan to Donate Monero to admin
Scan the QR code or copy the address below into your wallet to send some Monero:

Donate ZCash to admin

Scan to Donate ZCash to admin
Scan the QR code or copy the address below into your wallet to send some ZCash:

Leave a Reply