Right way to reverse pandas.DataFrame?

Here is my code:

    import pandas as pd

    data = pd.DataFrame({'Odd':[1,3,5,6,7,9], 'Even':[0,2,4,6,8,10]})

    for i in reversed(data):
        print(data['Odd'], data['Even'])

When I run this code, i get the following error:

    Traceback (most recent call last):
      File "C:\Python33\lib\site-packages\pandas\core\generic.py", line 665, in _get_item_cache
        return cache[item]
    KeyError: 5

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
      File "C:\Users\*****\Documents\******\********\****.py", line 5, in <module>
        for i in reversed(data):
      File "C:\Python33\lib\site-packages\pandas\core\frame.py", line 2003, in __getitem__
        return self._get_item_cache(key)
      File "C:\Python33\lib\site-packages\pandas\core\generic.py", line 667, in _get_item_cache
        values = self._data.get(item)
      File "C:\Python33\lib\site-packages\pandas\core\internals.py", line 1656, in get
        _, block = self._find_block(item)
      File "C:\Python33\lib\site-packages\pandas\core\internals.py", line 1936, in _find_block
        self._check_have(item)
      File "C:\Python33\lib\site-packages\pandas\core\internals.py", line 1943, in _check_have
        raise KeyError('no item named %s' % com.pprint_thing(item))
    KeyError: 'no item named 5'

Why am I getting this error?
How can I fix that?
What is the right way to reverse pandas.DataFrame?

    data.reindex(index=data.index[::-1])

or simply:

    data.iloc[::-1]

will reverse your data frame, if you want to have a for loop which goes from down to up you may do:

    for idx in reversed(data.index):
        print(idx, data.loc[idx, 'Even'], data.loc[idx, 'Odd'])

or

    for idx in reversed(data.index):
        print(idx, data.Even[idx], data.Odd[idx])

You are getting an error because reversed first calls data.__len__() which returns 6. Then it tries to call data[j - 1] for j in range(6, 0, -1), and the first call would be data[5]; but in pandas dataframe data[5] means column 5, and there is no column 5 so it will throw an exception. ( see docs )

From: stackoverflow.com/q/20444087

Back to homepage or read more recommendations: