English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Перестройка индексов Это изменит метки строк и столбцов 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