重置索引(reindex)可以更改原DataFrame的行标签或列标签,并使更改后的行、列标签与DataFrame中的数据逐一匹配。通过重置索引操作,您可以完成对现有数据的重新排序。如果重置的索引标签在原DataFrame中不存在,那么该标签对应的元素值将全部填充为NaN。 重置行列标签 看一组简单示例: import pandas as pdimport numpy as np N=20df = 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() })#重置行、列索引标签df_reindexed = df.reindex(index=[0,2,5], columns=['A', 'C', 'B']) print(df_reindexed)12345678910111213复制代码类型:[python] 输出结果: A C B0 2020-12-07 Medium NaN2 2020-12-09 Low NaN5 2020-12-12 High NaN1234复制代码类型:[python] 现有a、b两个DataFrame对象,如果想让a的行索引与b相同,您可以使用reindex_like()方法。示例如下: import pandas as pdimport numpy as np a = pd.DataFrame(np.random.randn(10,3),columns=['col1','col2','col3']) b = pd.DataFrame(np.random.randn(7,3),columns=['col1','col2','col3']) a= a.reindex_like(b) print(a)123456复制代码类型:[python] 输出结果: col1 col2 col30 1.776556 -0.821724 -1.2201951 -1.401443 0.317407 -0.6638482 0.300353 -1.010991 0.9391433 0.444041 -1.875384 0.8461124 0.967159 0.369450 -0.4141285 0.320863 -1.223477 -0.3371106 -0.933665 0.909382 1.12948112345678复制代码类型:[python] 上述示例,a会按照b的形式重建行索引。需要特别注意的是,a与b的列索引标签必须相同。 填充元素值reindex_like()提供了一个可选的参数method,使用它来填充相应的元素值,参数值介绍如下: pad/ffill:向前填充值; bfill/backfill:向后填充值; nearest:从距离最近的索引值开始填充。 示例如下: import pandas as pdimport 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'])#使df2和df1行标签相同print(df2.reindex_like(df1))#向前填充print(df2.reindex_like(df1,method='ffill'))12345678复制代码类型:[python] 输出结果: #填充前 col1 col2 col30 0.129055 0.835440 0.3830651 -0.357231 0.379293 1.2115492 NaN NaN NaN3 NaN NaN NaN4 NaN NaN NaN5 NaN NaN NaN#填充后 col1 col2 col30 0.129055 0.835440 0.3830651 -0.357231 0.379293 1.2115492 -0.357231 0.379293 1.2115493 -0.357231 0.379293 1.2115494 -0.357231 0.379293 1.2115495 -0.357231 0.379293 1.21154912345678910111213141516复制代码类型:[python] 限制填充行数reindex_like()还提供了一个额外参数limit,该参数用来控制填充的最大行数。示例如下: import pandas as pdimport 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'])print (df2.reindex_like(df1))#最多填充2行print (df2.reindex_like(df1,method='ffill',limit=2))1234567复制代码类型:[python] 输出结果: col1 col2 col30 -1.829469 0.310332 -2.0088611 -1.038512 0.749333 -0.0943352 NaN NaN NaN3 NaN NaN NaN4 NaN NaN NaN5 NaN NaN NaN col1 col2 col30 -1.829469 0.310332 -2.0088611 -1.038512 0.749333 -0.0943352 -1.038512 0.749333 -0.0943353 -1.038512 0.749333 -0.0943354 NaN NaN NaN5 NaN NaN NaN123456789101112131415复制代码类型:[python] 由上述示例可以看出,填充了2、3行缺失值,也就是只填充了2行数据。 重命名标签rename()方法允许您使用某些映射(dict或Series)或任意函数来对行、列标签重新命名,示例如下: import pandas as pdimport numpy as np df1 = pd.DataFrame(np.random.randn(6,3),columns=['col1','col2','col3'])print (df1)#对行和列重新命名print (df1.rename(columns={'col1' : 'c1', 'col2' : 'c2'},index = {0 : 'apple', 1 : 'banana', 2 : 'durian'}))123456复制代码类型:[python] 输出结果: col1 col2 col30 -1.762133 -0.636819 -0.3095721 -0.093965 -0.924387 -2.0314572 -1.231485 -0.738667 1.4157243 -0.826322 0.206574 -0.7317014 1.863816 -0.175705 0.4919075 0.677361 0.870041 -0.636518 c1 c2 col3 apple -1.762133 -0.636819 -0.309572banana -0.093965 -0.924387 -2.031457durian -1.231485 -0.738667 1.4157243 -0.826322 0.206574 -0.7317014 1.863816 -0.175705 0.4919075 0.677361 0.870041 -0.636518123456789101112131415复制代码类型:[python] rename()方法提供了一个inplace参数,默认值为False,表示拷贝一份原数据,并在复制后的数据上做重命名操作。若inplace=True则表示在原数据的基础上重命名。 |
|