English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Восстановление индекса Pandas

Перестройка индексов Это изменит метки строк и столбцов DataFrame. Перенумерация - это процесс приведения данных в соответствие с заданным набором меток на определенной оси.

Через индекс можно выполнить множество операций, например,-

Пересортировка существующих данных для соответствия новому набору меток.Вставка значков пропусков (NA) в места меток данных, где они отсутствуют.

Пример:

 import pandas as pd
 import numpy as np
 N=20
 df = pd.DataFrame({
    'A': pd.date_range(start='2016-01-01',periods=N,freq='D'),
    'x': np.linspace(0,stop=N-1,num=N),
    'y': np.random.rand(N),
    'C': np.random.choice(['Low','Medium','High'],N).tolist(),
    'D': np.random.normal(100, 10, size=(N)).tolist()
 )
 # Перестройка индексов DataFrame
 df_reindexed = df.reindex(index=[0,2,5], columns=['A', 'C', 'B'])
 print(df_reindexed)

Результат выполнения:

           A  C  B
0  2016-01-01  Низкий  NaN
2  2016-01-03  Высокий  NaN
5  2016-01-06  Низкий  NaN

Перенумерация для соответствия другим объектам

Вам может понадобиться получить объект и его ось для индексации, чтобы она соответствовала другой оси. Рассмотрите следующий пример, чтобы понять аналогичное содержимое.

Пример

 import pandas as pd
 import numpy as np
 df1 = pd.DataFrame(np.random.randn(10,3),columns=['col1','col2','col3'])
 df2 = pd.DataFrame(np.random.randn(7,3),columns=['col1','col2','col3'])
 df1 = df1.reindex_like(df2)
 print(df1)

Результат выполнения:

         col1  col2  col3
0  -2.467652  -1.211687  -0.391761
-0.287396  0.522350  0.562512
2 -0.255409 -0.483250 1.866258
3 -1.150467 -0.646493 -0.222462
4 0.152768 -2.056643 1.877233
5 -1.155997 1.528719 -1.343719
6 -1.015606 -1.245936 -0.295275

Здесь DataFrame df1 изменяется и перер索引ируется как df2. Имена столбцов должны соответствовать, в противном случае к целому столбцу будут добавлены NaN.

Заполнение при перер索引ировании

reindex() Использование параметра метода, это один из способов заполнения, значения которого такие как

pad/ffill - Заполнение значением из первого

bfill/backfill - Заполнение значением из последнего

nearest - Заполнение из ближайшего индекса

Пример

 import pandas as pd
 import numpy as np
 df1 = pd.DataFrame(np.random.randn(6,3),columns=['col1','col2','col3'])
 df2 = pd.DataFrame(np.random.randn(2,3),columns=['col1','col2','col3'])
 # Заполнение NAN
 print df2.reindex_like(df1)
 # Заполнение NAN значением из предыдущего значения
 print("Данные кадров с предварительным заполнением:")
 print(df2.reindex_like(df1, method='ffill'))

Результат выполнения:

         col1 col2 col3
0 1.311620 -0.707176 0.599863
1 -0.423455 -0.700265 1.133371
2 NaN NaN NaN NaN
3 NaN NaN NaN NaN
4 NaN NaN NaN NaN
5 NaN NaN NaN NaN
Данные кадров с предварительным заполнением:
         col1        col2        col3
1.311620 -0.707176 0.599863
-0.423455 -0.700265 1.133371
-0.423455 -0.700265 1.133371
-0.423455 -0.700265 1.133371
-0.423455 -0.700265 1.133371
-0.423455 -0.700265 1.133371

Последние четыре строки были заполнены.

Ограничение заполнения при повторной индикации

Параметр limit предоставляет дополнительный контроль при повторной индикации. Ограничение specifies максимальное количество последовательных совпадений. Давайте рассмотрим следующий пример, чтобы понять это-

Пример

 import pandas as pd
 import numpy as np
  
 df1 = pd.DataFrame(np.random.randn(6,3),columns=['col1','col2','col3'])
 df2 = pd.DataFrame(np.random.randn(2,3),columns=['col1','col2','col3'])
 # Заполнение NAN
 print df2.reindex_like(df1)
 # Теперь заполните NAN значениями из предыдущих значений
print("Данные кадра с ограничением переднего заполнения 1:")
 print(df2.reindex_like(df1,method='ffill',limit=1))

Результат выполнения:

         col1        col2        col3
0    0.247784    2.128727    0.702576
1   -0.055713   -0.021732   -0.174577
2         NaN         NaN         NaN
3         NaN         NaN         NaN
4         NaN         NaN         NaN
5         NaN         NaN         NaN
Данные кадра с ограничением переднего заполнения 1:
         col1        col2        col3
0    0.247784    2.128727    0.702576
1   -0.055713   -0.021732   -0.174577
2   -0.055713   -0.021732   -0.174577
3         NaN         NaN         NaN
4         NaN         NaN         NaN
5         NaN         NaN         NaN

Обратите внимание, что предыдущая шестая строка только заполнила седьмую строку. Затем, все строки сохраняются без изменений.

Переименование

С помощью метода rename() вы можете переименовать оси на основе некоторых отображений (словаря или последовательности) или произвольной функции.  
Давайте рассмотрим следующий пример, чтобы понять это-

  import pandas as pd
 import numpy as np
 df1 = pd.DataFrame(np.random.randn(6,3),columns=['col1','col2','col3'])
 print df1
 print("После переименования строк и столбцов:")
 print(df1.rename(columns={'col1' : 'c1', 'col2' : 'c2'},
 index = {0 : 'apple', 1 : 'banana', 2 : 'durian'})

Результат выполнения:

         col1        col2        col3
0    0.486791    0.105759    1.540122
1   -0.990237    1.007885   -0.217896
2   -0.483855   -1.645027   -1.194113
3   -0.122316    0.566277   -0.366028
4   -0.231524   -0.721172   -0.112007
5    0.438810    0.000225    0.435479
После переименования строк и столбцов:
                c1          c2        col3
apple     0.486791    0.105759    1.540122
banana   -0.990237    1.007885   -0.217896
durian   -0.483855   -1.645027   -1.194113
3        -0.122316    0.566277   -0.366028
4        -0.231524   -0.721172   -0.112007
5         0.438810    0.000225    0.435479