Неожиданный порядок при использовании DataFrame.sort_index (axis = 1). Первый столбец указан последним - PullRequest
0 голосов
/ 31 августа 2018

У меня есть образец DataFrame, заполненный так:

               Alpha      Beta     Gamma     Delta   Epsilon
Date
2017-01-02  0.854046       NaN  0.681606  0.883779  0.680304
2017-01-01  0.573784  0.407917  0.446668  0.463504  0.136830
2017-01-03  0.556100  0.849009  0.389748       NaN  0.777201

Когда я сортирую по оси = 1 (заголовки столбцов), столбец «Альфа» помещается в последнюю позицию:

df_sorted = df1.sort_index(axis=1)
print df_sorted

Выход:

                Beta     Delta   Epsilon     Gamma     Alpha
Date
2017-01-02       NaN  0.883779  0.680304  0.681606  0.854046
2017-01-01  0.407917  0.463504  0.136830  0.446668  0.573784
2017-01-03  0.849009       NaN  0.777201  0.389748  0.556100

Может кто-нибудь объяснить алфавитно-цифровую сортировку столбцов?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

Возможно, у вас есть пробелы перед именами некоторых столбцов, используя @ rahlf23 setup с некоторыми изменениями:

df = pd.DataFrame([['2017-01-02',  ' 0.854046',       np.nan,  '0.681606',  '0.883779',  '0.680304'],
                    ['2017-01-01',  '0.573784',  '0.407917',  '0.446668',  '0.463504',  '0.136830'],
                    ['2017-01-03',  '0.556100',  '0.849009',  '0.389748',       np.nan,  '0.777201']],
                    columns=['Date', ' Beta',      ' Gamma',     ' Delta',     'Alpha',   ' Epsilon']).set_index('Date')

df.sort_index(axis=1)

Выход:

                 Beta     Delta   Epsilon     Gamma     Alpha
Date                                                         
2017-01-02   0.854046  0.681606  0.680304       NaN  0.883779
2017-01-01   0.573784  0.446668  0.136830  0.407917  0.463504
2017-01-03   0.556100  0.389748  0.777201  0.849009       NaN

Чтобы определить это, вы можете использовать df.to_dict():

{' Beta': {'2017-01-01': '0.573784',
  '2017-01-02': ' 0.854046',
  '2017-01-03': '0.556100'},
 ' Delta': {'2017-01-01': '0.446668',
  '2017-01-02': '0.681606',
  '2017-01-03': '0.389748'},
 ' Epsilon': {'2017-01-01': '0.136830',
  '2017-01-02': '0.680304',
  '2017-01-03': '0.777201'},
 ' Gamma': {'2017-01-01': '0.407917',
  '2017-01-02': nan,
  '2017-01-03': '0.849009'},
 'Alpha': {'2017-01-01': '0.463504',
  '2017-01-02': '0.883779',
  '2017-01-03': nan}}

И чтобы исправить, вы можете использовать .str.strip ()

df.columns = df.columns.str.strip()
df.sort_index(axis=1)

Выход:

               Alpha       Beta     Delta   Epsilon     Gamma
Date                                                         
2017-01-02  0.883779   0.854046  0.681606  0.680304       NaN
2017-01-01  0.463504   0.573784  0.446668  0.136830  0.407917
2017-01-03       NaN   0.556100  0.389748  0.777201  0.849009
0 голосов
/ 31 августа 2018

Я не могу воспроизвести вашу проблему (Python 3.6.2, pandas 0.23.1), см. Ниже:

df = pd.DataFrame([['2017-01-02',  ' 0.854046',       np.nan,  '0.681606',  '0.883779',  '0.680304'],
                    ['2017-01-01',  '0.573784',  '0.407917',  '0.446668',  '0.463504',  '0.136830'],
                    ['2017-01-03',  '0.556100',  '0.849009',  '0.389748',       np.nan,  '0.777201']],
                    columns=['Date', 'Alpha',      'Beta',     'Gamma',     'Delta',   'Epsilon']).set_index('Date')

Дает:

                Alpha      Beta     Gamma     Delta   Epsilon
Date                                                         
2017-01-02   0.854046       NaN  0.681606  0.883779  0.680304
2017-01-01   0.573784  0.407917  0.446668  0.463504  0.136830
2017-01-03   0.556100  0.849009  0.389748       NaN  0.777201

Индекс сортировки:

df.sort_index()

Дает:

                Alpha      Beta     Gamma     Delta   Epsilon
Date                                                         
2017-01-01   0.573784  0.407917  0.446668  0.463504  0.136830
2017-01-02   0.854046       NaN  0.681606  0.883779  0.680304
2017-01-03   0.556100  0.849009  0.389748       NaN  0.777201

И сортировка столбцов:

df.sort_index(axis=1)

Дает:

                Alpha      Beta     Delta   Epsilon     Gamma
Date                                                         
2017-01-02   0.854046       NaN  0.883779  0.680304  0.681606
2017-01-01   0.573784  0.407917  0.463504  0.136830  0.446668
2017-01-03   0.556100  0.849009       NaN  0.777201  0.389748
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...