Pandas reindex重置索引
重置索引(reindex)可以更改原 DataFrame 的行标签或列标签,并使更改后的行、列标签与 DataFrame 中的数据逐一匹配。通过重置索引操作,您可以完成对现有数据的重新排序。如果重置的索引标签在原 DataFrame 中不存在,那么该标签对应的元素值将全部填充为 NaN。
重置行列标签
看一组简单示例:
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()
})
#重置行、列索引标签
df_reindexed = df.reindex(index=[0,2,5], columns=['A', 'C', 'B'])
print(df_reindexed)
输出结果:
A C B
0 2020-12-07 Medium NaN
2 2020-12-09 Low NaN
5 2020-12-12 High NaN
现有 a、b 两个 DataFrame 对象,如果想让 a 的行索引与 b 相同,您可以使用 reindex_like() 方法。示例如下:
import pandas as pd
import 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)
输出结果:
col1 col2 col3
0 1.776556 -0.821724 -1.220195
1 -1.401443 0.317407 -0.663848
2 0.300353 -1.010991 0.939143
3 0.444041 -1.875384 0.846112
4 0.967159 0.369450 -0.414128
5 0.320863 -1.223477 -0.337110
6 -0.933665 0.909382 1.129481
上述示例,a 会按照 b 的形式重建行索引。需要特别注意的是,a 与 b 的列索引标签必须相同。
填充元素值
reindex_like() 提供了一个可选的参数method,使用它来填充相应的元素值,参数值介绍如下: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'])
#使df2和df1行标签相同
print(df2.reindex_like(df1))
#向前填充
print(df2.reindex_like(df1,method='ffill'))
输出结果:
#填充前
col1 col2 col3
0 0.129055 0.835440 0.383065
1 -0.357231 0.379293 1.211549
2 NaN NaN NaN
3 NaN NaN NaN
4 NaN NaN NaN
5 NaN NaN NaN
#填充后
col1 col2 col3
0 0.129055 0.835440 0.383065
1 -0.357231 0.379293 1.211549
2 -0.357231 0.379293 1.211549
3 -0.357231 0.379293 1.211549
4 -0.357231 0.379293 1.211549
5 -0.357231 0.379293 1.211549
限制填充行数
reindex_like() 还提供了一个额外参数 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'])
print (df2.reindex_like(df1))
#最多填充2行
print (df2.reindex_like(df1,method='ffill',limit=2))
输出结果:
col1 col2 col3
0 -1.829469 0.310332 -2.008861
1 -1.038512 0.749333 -0.094335
2 NaN NaN NaN
3 NaN NaN NaN
4 NaN NaN NaN
5 NaN NaN NaN
col1 col2 col3
0 -1.829469 0.310332 -2.008861
1 -1.038512 0.749333 -0.094335
2 -1.038512 0.749333 -0.094335
3 -1.038512 0.749333 -0.094335
4 NaN NaN NaN
5 NaN NaN NaN
由上述示例可以看出,填充了 2、3 行 缺失值,也就是只填充了 2 行数据。
重名标签
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 (df1.rename(columns={'col1' : 'c1', 'col2' : 'c2'},index = {0 : 'apple', 1 : 'banana', 2 : 'durian'}))
输出结果:
col1 col2 col3
0 -1.762133 -0.636819 -0.309572
1 -0.093965 -0.924387 -2.031457
2 -1.231485 -0.738667 1.415724
3 -0.826322 0.206574 -0.731701
4 1.863816 -0.175705 0.491907
5 0.677361 0.870041 -0.636518
c1 c2 col3
apple -1.762133 -0.636819 -0.309572
banana -0.093965 -0.924387 -2.031457
durian -1.231485 -0.738667 1.415724
3 -0.826322 0.206574 -0.731701
4 1.863816 -0.175705 0.491907
5 0.677361 0.870041 -0.636518
rename() 方法提供了一个 inplace 参数,默认值为 False,表示拷贝一份原数据,并在后的数据上做重名操作。若 inplace=True 则表示在原数据的基础上重名。
- 随机文章
- 出国 香肠 马尔代夫(出国游加入香肠之旅,探寻马尔代夫之美)
- 中国 马尔代夫 几点(中马关系再升温!)
- 马尔代夫鲨鱼爸爸(鲨鱼爸爸在马尔代夫:守护家庭巢穴)
- 西安-马尔代夫机型(西安至马尔代夫航线机型更新!)
- 马尔代夫花园阳台(马尔代夫海滨别墅带私人花园阳台)
- 云南德宏马尔代夫(云南德宏的奇幻世界:马尔代夫隐藏版)
- 怀念马尔代夫散文(怀念马尔代夫:一场久违的沉醉与遗憾)
- 宜昌马尔代夫公园(宜昌打造马尔代夫公园成为旅游新热点)
- 印尼 马尔代夫(印尼和马尔代夫:南洋度假胜地)
- 山东龙口马尔代夫(龙口首个马尔代夫主题公园正式开放!)
- 描绘马尔代夫日落(美丽的马尔代夫在夕阳下展现美丽风光)
- 广东马尔代夫滑梯(广东别样风情:马尔代夫滑梯独家亮相)
- 昆明房价马尔代夫(昆明房价水平可前往马尔代夫购买房产)
- 欢迎来到马尔代夫(探索马尔代夫:一个天堂般的度假胜地)
- 亚洲 马尔代夫(风情万种的印度洋明珠——马尔代夫)
- 港警 马尔代夫(香港警方协助马尔代夫打击跨境犯罪)
- 港口出口马尔代夫(马尔代夫的出口,京东物流可助您完成)
- 最近能去马尔代夫(最新:现在是去马尔代夫的最佳时刻!)
- 国庆 马尔代夫(马尔代夫:秋日里的天堂之旅)
- 西宁马尔代夫现状(西宁市民在马尔代夫的旅游经历和感受)
- 嵊泗 马尔代夫(从嵊泗到马尔代夫:一个旅行家的海岛之旅)
- 简阳马尔代夫美景(探索简阳马尔代夫:美丽美景惊艳世界)
- 马尔代夫介绍桌面(探秘马尔代夫——珊瑚岛上的海底世界)
- 西宁马尔代夫海滩(西宁市打造马尔代夫海滩风情旅游项目)
- 马尔代夫中国关系(马尔代夫与中国建交谈判取得重大进展)
- 马尔代夫丁字泳衣(马尔代夫流行的丁字泳衣呈现多种造型)
- 不丹 马尔代夫(不丹和马尔代夫:两个美丽旅游目的地的比较)
- 汤加 马尔代夫(汤加和马尔代夫举行高级别磋商会议)
- 太原 马尔代夫(太原市民享受马尔代夫美食饕餮盛宴)
- 马尔代夫凉亭视频(惬意度假天堂:马尔代夫凉亭视频曝光)
