Учебники

Python Pandas — переиндексация

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

Многократные операции могут быть выполнены посредством индексации как —

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

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

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

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

пример

Live Demo

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()
})

#reindex the DataFrame
df_reindexed = df.reindex(index=[0,2,5], columns=['A', 'C', 'B'])

print df_reindexed

Его вывод выглядит следующим образом —

            A    C     B
0  2016-01-01  Low   NaN
2  2016-01-03  High  NaN
5  2016-01-06  Low   NaN

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

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

пример

Live Demo

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
1    -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

Примечание. Здесь фрейм данных df1 изменяется и переиндексируется, как и df2 . Имена столбцов должны совпадать, иначе NAN будет добавлен для всей метки столбца.

Заполнение при переиндексации

Метод reindex () принимает метод необязательного параметра, который представляет собой метод заполнения со следующими значениями:

  • pad / ffill — заполнить значения вперед

  • bfill / backfill — заполнить значения задом наперед

  • ближайший — заполнить из ближайших значений индекса

pad / ffill — заполнить значения вперед

bfill / backfill — заполнить значения задом наперед

ближайший — заполнить из ближайших значений индекса

пример

Live Demo

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'])

# Padding NAN's
print df2.reindex_like(df1)

# Now Fill the NAN's with preceding Values
print ("Data Frame with Forward Fill:")
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
3         NaN         NaN        NaN
4         NaN         NaN        NaN
5         NaN         NaN        NaN

Data Frame with Forward Fill:
         col1        col2        col3
0    1.311620   -0.707176    0.599863
1   -0.423455   -0.700265    1.133371
2   -0.423455   -0.700265    1.133371
3   -0.423455   -0.700265    1.133371
4   -0.423455   -0.700265    1.133371
5   -0.423455   -0.700265    1.133371

Примечание . Последние четыре строки дополняются.

Ограничения на наполнение при переиндексации

Аргумент limit обеспечивает дополнительный контроль над заполнением при переиндексации. Лимит определяет максимальное количество последовательных совпадений. Давайте рассмотрим следующий пример, чтобы понять то же самое —

пример

Live Demo

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'])

# Padding NAN's
print df2.reindex_like(df1)

# Now Fill the NAN's with preceding Values
print ("Data Frame with Forward Fill limiting to 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

Data Frame with Forward Fill limiting to 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

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

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

Метод rename () позволяет перемаркировать ось на основе некоторого сопоставления (dict или Series) или произвольной функции.

Давайте рассмотрим следующий пример, чтобы понять это —

Live Demo

import pandas as pd
import numpy as np

df1 = pd.DataFrame(np.random.randn(6,3),columns=['col1','col2','col3'])
print df1

print ("After renaming the rows and columns:")
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

After renaming the rows and columns:
                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

Метод rename () предоставляет параметр с именем inplace , который по умолчанию имеет значение False и копирует базовые данные. Pass inplace = True, чтобы переименовать данные на месте.