data = pd.read_excel(r'meal_order_detail.xlsx')
print(data.columns)
Index(['detail_id', 'order_id', 'dishes_id', 'logicprn_name',
'parent_class_name', 'dishes_name', 'itemis_add', 'counts', 'amounts',
'cost', 'place_order_time', 'discount_amt', 'discount_reason',
'kick_back', 'add_inprice', 'add_info', 'bar_code', 'picture_file',
'emp_id'],
dtype='object')
读取一个xlsx文件后对其进行操作
操作1 transform
transform操作可以将括号内的内函数功能作用到counts的每一个元素
print(data['counts'].head())
print(data['counts'].transform(lambda x: x * 2).head())
0 1
1 1
2 1
3 1
4 1
Name: counts, dtype: int64
0 2
1 2
2 2
3 2
4 2
Name: counts, dtype: int64
操作2 透视表piyot_table
print(pd.pivot_table(data, columns='order_id',
index='dishes_name',
values='counts',
aggfunc=np.sum,
fill_value='空',
margins=True,
margins_name='汇总'))
index:行分组键,分组键的取值在行索引的位置充当行索引;
aggfunc表示聚合函数
values:指定想要进行聚合的列
columns:列分组键,分组键的取值在列索引额位置充当列索引
fill_value将np.nan的值填充为对应的值
margins:汇总开关,默认为False,当margins为True的时候,添加汇总的行与列;
margins_name:汇总的列或者行的columns,index的索引
操作3 交叉表crosstab,必须传index和columns
print(pd.crosstab(index=data['order_id'],columns=data['dishes_name'],
values=data['counts'],
aggfunc=np.sum))
操作4 表格合并方法concat:纵向拼接,拼接表格纵向一致的表格
concat:join='outer’表示外连接,求的是并集,‘inner’内连接,求的是交集
verify_integrity检查是否有重复值,有就报错,False表示有重复不报错
left = pd.DataFrame({'key1': ['K0', 'K0', 'K1', 'K2'],
'key2': ['K0', 'K1', 'K0', 'K1'],
'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3']})
right = pd.DataFrame({'key1': ['K0', 'K1', 'K1', 'K2'],
'key2': ['K0', 'K0', 'K0', 'K0'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']})
print(pd.concat((left,right),axis=1))
print(pd.concat((left,right),axis=0)) #纵向堆叠
print(pd.concat((left,right),axis=0,join='outer',verify_integrity=False)) #横向堆叠
merge默认按照交集进行堆叠
on:表示两个表以什么为主键进行连接
how表示连接的方式,left表示按照left表为主,right表示按照right表为主
print(pd.merge(left,right,on='key1',how='left'))
当两个表中主键的名称不一样时不能用on连接,用left_on指定左表中的主键,用left_on指定右表中的主键
print(pd.merge(left,right,left_on='key1',right_on='key2',how='right'))
更改表格名称的方法
left.rename(columns={'key1': 'key2222'},inplace=True)