【问题一】 如何更改列或行的顺序?如何交换奇偶行(列)的顺序?
df.reindex(index=[5,2,3,1,4], columns=['Height','Weight'])
r_col = list(df.columns.values)
for i,j in enumerate(r_col):
if(i%2==1):
r_col[i-1] = j;
r_col[i]=tmp;
tmp = j;
print(r_col)
df.reindex(columns=r_col)
【问题二】 如果要选出DataFrame的某个子集,请给出尽可能多的方法实现。
- df.loc()
- df.iloc()
- df[]
- df.query()
【问题三】 query函数比其他索引方法的速度更慢吗?在什么场合使用什么索引最高效?
- query 函数比其他索引方法更快,可以避免潜在的数据在不同内存缓存间的移动,节省内存,语法简洁。
- 当 DataFrame 占用内存较多时,推荐使用 eval()/query()
【问题四】 单级索引能使用Slice对象吗?能的话怎么使用,请给出一个例子。
idx = pd.IndexSlice
df.loc[idx[df['Math']>60]]
df.loc[idx[1]:]
【问题五】 如何快速找出某一列的缺失值所在索引?
df_f = pd.DataFrame({'A':[10,2,3,100,-1]},index=[1,2,6,5,7])
df_f['B'] = list('abbc1')
df_f = df_f.assign(C = pd.Series(list('deff')))
df_f[df_f['C'].isnull()].index[0]
np.where(df_f['C'].isnull())
【问题六】 索引设定中的所有方法分别适用于哪些场合?怎么直接把某个DataFrame的索引换成任意给定同长度的索引?
df = pd.read_csv('data/table.csv',index_col='ID').sort_index()
df.reindex(index=[1101,1203,1204,1206,2402,1205],method='bfill')
df.reset_index()
df.set_index(keys='列名')
df.set_index(pd.Series(np.random.randint(0,100,df.shape[0])))
【问题七】 对于多层索引,怎么对内层进行条件筛选?
df_s.loc[idx['B':,df_s.iloc[:,0]>0.6],:]
【问题八】 swaplevel中的axis参数为1时,代表什么意思?i和j只能是数值型吗?
axis = 1表示对columns操作
axis = 0表示对index操作
if axis == 0:
result.index = result.index.swaplevel(i, j)
else:
result.columns = result.columns.swaplevel(i, j)
i 和 j可以是string类型