📅  最后修改于: 2020-10-29 05:31:12             🧑  作者: Mango
Pandas 重新索引的主要任务是使DataFrame与具有可选填充逻辑的新索引保持一致,并将NA / NaN放置在先前索引中不存在值的位置。它返回一个新对象,除非产生与当前索引等效的新索引,并且copy的值变为False。
重新索引用于更改DataFrame的行和列的索引。我们可以使用reindex()方法为单行或多行重新索引。如果新索引中的默认值不在DataFrame中,则分配为NaN。
DataFrame.reindex(labels=None, index=None, columns=None, axis=None, method=None, copy=True, level=None, fill_value=nan, limit=None, tolerance=None)
labels
:这是一个可选参数,它引用新标签或索引以符合“轴”所指定的轴。
index,columns:它也是一个可选参数,它引用新标签或索引。通常,它倾向于使用索引对象来避免重复数据。
axis:它也是以轴为目标的可选参数,可以是轴名称或数字。
method
:这也是一个可选参数,用于填充重新索引的DataFrame中的孔。它只能以单调递增/递减顺序应用于DataFrame或Series。
None:这是一个默认值,不会填补空白。
pad / ffill:用于将最后一个有效观察向前传播到下一个有效观察。
backfill / bfill:要填充空白,它使用下一个有效观察值。
nearest:为了填补空白,它使用了下一个有效观察值。
copy
:它的默认值为True,即使传递的索引相同,也返回一个新对象作为布尔值。
level:用于跨级别广播,并在传递的MultiIndex级别上匹配索引值。
fill_value:其默认值为np.NaN,用于填充现有的缺失(NaN)值。它需要任何新元素来成功实现DataFrame对齐,并在计算前使用此值。
limit:它定义要向前或向后填充的连续元素的最大数量。
tolerance:这也是一个可选参数,用于确定不精确匹配的原始标签和新标签之间的最大距离。在匹配位置,索引值应最满足方程abs(index [indexer]?target)<=公差。
它返回重新索引的DataFrame。
以下示例显示了reindex()函数为数据帧重新编制索引的工作。在新索引中,默认值在新索引中分配为NaN,而新索引在DataFrame中没有相应的记录。
注意:我们可以使用fill_value来填充缺失值。
import pandas as pd
# Create dataframe
info = pd.DataFrame({"P":[4, 7, 1, 8, 9],
"Q":[6, 8, 10, 15, 11],
"R":[17, 13, 12, 16, 14],
"S":[15, 19, 7, 21, 9]},
index =["Parker", "William", "Smith", "Terry", "Phill"])
# Print dataframe
info
输出:
A B D E
Parker NaN NaN NaN NaN
William NaN NaN NaN NaN
Smith NaN NaN NaN NaN
Terry NaN NaN NaN NaN
Phill NaN NaN NaN NaN
现在,我们可以使用dataframe.reindex()函数为数据帧重新编制索引。
# reindexing with new index values
info.reindex(["A", "B", "C", "D", "E"])
输出:
P Q R S
A NaN NaN NaN NaN
B NaN NaN NaN NaN
C NaN NaN NaN NaN
D NaN NaN NaN NaN
E NaN NaN NaN NaN
请注意,新索引填充了NaN值。我们可以使用fill_value参数填写缺少的值。
# filling the missing values by 100
info.reindex(["A", "B", "C", "D", "E"], fill_value =100)
输出:
P Q R S
A 100 100 100 100
B 100 100 100 100
C 100 100 100 100
D 100 100 100 100
E 100 100 100 100
范例2:
此示例显示了reindex()函数为列轴重新编制索引的工作。
# importing pandas as pd
importpandas as pd
# Creating the first dataframe
info1 =pd.DataFrame({"A":[1, 5, 3, 4, 2],
"B":[3, 2, 4, 3, 4],
"C":[2, 2, 7, 3, 4],
"D":[4, 3, 6, 12, 7]})
# reindexing the column axis with
# old and new index values
info.reindex(columns =["A", "B", "D", "E"])
输出:
A B D E
Parker NaN NaN NaN NaN
William NaN NaN NaN NaN
Smith NaN NaN NaN NaN
Terry NaN NaN NaN NaN
Phill NaN NaN NaN NaN
请注意,重新编制索引后,新列中存在NaN值,我们可以在函数使用参数fill_value来删除NaN值。
# reindex the columns
# fill the missing values by 25
info.reindex(columns =["A", "B", "D", "E"], fill_value =37)
输出:
A B D E
Parker 37 37 37 37
William 37 37 37 37
Smith 37 37 37 37
Terry 37 37 37 37
Phill 37 37 37 37