Datawhale干货
作者:闫钟峰,Datawhale优秀学习者
寄语:本文对索引设定、常用索引型函数、重复元素处理、抽样函数等内容做了详细介绍。
索引设定
1. index_col参数
index_col是read_csv中的一个参数,而不是某一个方法,在使用 read_csv 函数读取文本的时候使用index_col参数指定用哪几个列作为索引
pd.read_csv('data/table.csv',index_col=['Address','School']).head()
2. reindex和reindex_like
reindex是指重新索引,它的重要特性在于索引对齐,很多时候用于重新排序。
df.head()
通过为reindex参数指定一个新的list,使得原始df的行重新排列。
df.reindex(index=sorted(list(df.index),reverse=True)).head()
如果传入的list是原始index的一个真子集, 则会实现分层抽样的效果
df.reindex(index=list(df.index)[::5])
为index传入的参数可以不是df的原始index中的值---这将引入缺失值构成的行,还可以传入重复索引。
df.reindex(index=[1101,1101,1203,1206,2402])
为columns传入参数,将对列索引做类似的事情。
df.reindex(columns=['Height','Height','Gender','Average']).head()
同时为index和columns传入原始index和columns 的真子集, 同样可以实现获取原始df的子df的目的。由于reindex的copy参数默认值是True,这时会返回一个新的变量,而不是修改原始df。
df.reindex(index=[1101,1203,2402],columns=['Height','Gender'])
可以选择缺失值的填充方法:
fill_value和method(bfill/ffill/nearest),其中method参数必须索引单调。bfill表示用所在索引1206的后一个有效行填充,ffill为前一个有效行。
df.reindex(index=[1101,1203,1206,2402],method='bfill')
数值上1205比1301更接近1206,因此用前者填充。nearest的最近, 是指在原始df中离得最近的,这个离得最近的可能并没有在被 reindex 的时候选中。
df.reindex(index=[1101,1203,1206,2402,1205,1301],method='nearest')
reindex_like的作用为生成一个横纵索引完全与参数列表一致的DataFrame,数据使用被调用的表。
df_temp = pd.DataFrame({'Weight':np.zeros(5),
'Height':np.zeros(5),
'ID':[1101,1104,1103,1106,1102]}).set_index('ID')
表中的值数据来自于df_temp, 而行索引和列索引则来自于传入的 df[0:5][['Weight','Height']]。由于df_temp中没有1105这个行索引,因此会引入缺失值。
df_temp.reindex_like(df[0:5][['Weight','Height']])