Переиндексация изменяет метки строк и меток столбцов DataFrame. Переиндексация означает соответствие данных для соответствия заданному набору меток вдоль определенной оси.
Многократные операции могут быть выполнены посредством индексации как —
-
Изменить порядок существующих данных, чтобы они соответствовали новому набору меток.
-
Вставьте маркеры отсутствующего значения (NA) в те места, где не было данных для метки.
Изменить порядок существующих данных, чтобы они соответствовали новому набору меток.
Вставьте маркеры отсутствующего значения (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() }) #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
Переиндексировать для выравнивания с другими объектами
Вы можете взять объект и переиндексировать его оси так, чтобы он был помечен как другой объект. Рассмотрим следующий пример, чтобы понять то же самое.
пример
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 — заполнить значения задом наперед
ближайший — заполнить из ближайших значений индекса
пример
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 обеспечивает дополнительный контроль над заполнением при переиндексации. Лимит определяет максимальное количество последовательных совпадений. Давайте рассмотрим следующий пример, чтобы понять то же самое —
пример
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) или произвольной функции.
Давайте рассмотрим следующий пример, чтобы понять это —
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, чтобы переименовать данные на месте.