针对datafrme主要操作公式梳理~为了方便阅读,这里的datafrme都赋值为a1,a2这样的形式;
这里对透视举个案例~
整体命令表格如下~
| 表格处理 | 案例 |
| 保留正确的 | 案例:a2=a1[a1['学校']=='A'] |
| 去除不对的 | 案例1:a2=a1[(a1.成绩!=0)] 案例2:a2=a1[(a1.学校!='A')&(a1.学院!='D')&(a1.专业!='G')] |
| 列合并 | 案例:a1['学校学院'] = a1['学校'].map(str) + a1['学院'].map(str) |
| 增加1列 | 案例1:a1.insert(0,'数量',1) 案例1:a1.insert(5,'状态','此人已毕业') |
| 改列名字 | 案例:a1.columns=['专业','学号'] |
| 单列改名字 | 案例:a1.rename(columns={'原列名':'新列名'}, inplace=True) |
| 表纵向叠加(1列1样) | 案例:a4=a1.append([a2,a3]) |
| 表横向加1列,vlookup | 案例:a3=pd.merge(a1,a2.loc[:,['学号','姓名']],how='left',on='学号') |
| 整体去重 | 案例:a2=a1.drop_duplicates(keep=False) #重复文本去重 'frist' 、 'last'、'False',保留第1个,保留最后1个,不保留 |
| 单列去空值 | 案例:a2=a1.dropna(subset=['姓名']) |
| 数据透视 | 案例:a2=pd.pivot_table(a1,index=[u'学校',u'学院'],columns=[u'专业'],values=[u'成绩'],aggfunc='mean',fill_value=0,margins=False)#行+列透视,np.sum为求和,'mean'为平均数 |
| 添加逻辑列 | 案例:a2=a1.eval('新列名=列1-列2')#可实现数字简单运算 |
| 排序 | 案例:a1.sort_values(by='比例',ascending=False) |
| 空值填充 | 案例:a2=a1.fillna(method='ffill',axis=0) #fillna和ffill 向下填充 |
| 列分列 | 案例: a2=a1['列名'].str.split(':', expand=True) #分列命令,按照:分列 pd.concat([a1, a2], axis=1) #返回原来位置 |
| 转置 | 案例:a2 = pd.DataFrame(a1.values.T, index=a1.columns, columns=a1.index) |
| 内容替换 | 案例:a1.replace(0,"nan") |
| 列求和 | 案例:a1.loc['合计'] = a1.apply(lambda x: x.sum()) |
| 行求和 | 案例:a1['Col_sum'] = a1.apply(lambda x: x.sum(), axis=1) |
| 删除列 | 案例:a1.drop(columns=['列名1','列名2'], inplace=False) |
| 获取datafrme列名,变为列表 | 案例:a2=a1.columns.values.tolist() |
| 保留前几行 | 案例:a2=a1.head(2) |
| 单列求和赋值 | 案例:a2=a1['数量'].sum() |
| 获取datadataframe单值 | 案例:a2=a1.at[2, '比例']#比例列,第3个,编号0,1,2 |
| 组合为dataframe | 案例:a2= pd.DataFrame([[b1], [b2], [b3]],index=[a1.at[2, '姓名'], a1.at[3, '姓名'],a1.at[4, '姓名']],columns=['分数']) |