python 小菜鸟笔记一

链接sql数据库

#!/usr/bin/env python
# encoding: utf-8
import pyodbc
import pandas as pd
import numpy as np
sql="""
SELECT 产品线,终端,品规,销售模式
	  ,cast(year([日期1]) as varchar(50))+right('00'+cast(month([日期1]) as nvarchar(50)),2)'年月'
	  ,sum([医院入库数量])'数量'
      ,sum(iif([销售模式]='自营',[商业发货单价]*[医院入库数量]/10000,[底价]*[医院入库数量]/10000))'价格'
FROM [商务部流向明细表] where [销售模式]!='自营' or [销售模式]!='小包' or [销售模式]!='中包' 
group by 产品线,终端,品规,year(日期1),month(日期1),销售模式
"""
conn = pyodbc.connect \
('DRIVER={SQL Server Native Client 11.0};SERVER=APSOOZRK6V8FK4X\MSSQLSERVER12;DATABASE=流向;UID=sa;PWD=abcd2012')
df = pd.read_sql(sql,con=conn)
conn.close()

DataFrame按照数据透视图摆放

dd=pd.pivot_table(df,                                     #dataframe
                  index=['产品线','终端','品规'],         #数据透视图的行,Y轴
                  values=['数量','价格'],                 #数据透视图的值,aggfunc的计算对象
                  columns=['年月'],                       #数据透视图的列,X轴
                  aggfunc=[np.sum,np.mean],               #对值的计算公式
                  fill_value=0,                           #缺失值默认为0
                  margins=True)                           #总计

记录

"""
df.index         #索引
df.values        #值
df.columns       #字段名
df.T             #转置
df.head(6)       #前6行
df.tail(6)       #后6行
df.sort_values('数量',ascending=False)               #按数量排序
df[2:9]          #切片
df['czp']=df['产品线']+'-'+df['终端']+'-'+df['品规']  #新增一列合并“产品线终端品规”
df.set_index(['czp','年月'],inplace=True)            #把列设置为索引,可以设置3个
del df['产品线']  #只能删一个 df.drop(df.columns[x], axis=1, inplace=True)
df.drop(df.columns[[0,1,2,3,4,5]], axis=1, inplace=True)   
                 #删除多列,从0计数,axis=1 对行索引操作,axis=0 对列索引操作
df.drop(columns=['B', 'C'])     #删除列
df.drop(index=[0, 1])           #删除行
df.unstack(level=1)             #按0,1,2的序号选第3个索引做行索引转置
df.swaplevel('czp','年月')       #层次索引由'czp','年月',变为'年月','czp'
                  #太长用‘ \’分,空格+'\'
df.reset_index()  #全部索引变成列    不改变原df
            #df.reset_index(level=['tick', 'obs'])/df.reset_index(level=0, inplace=True)指定索引变成列

#切片
#dh.ix[:6,:5]   被弃用
dh.iloc[:6,:5]                           #通过行号切片
dh.loc[:5,'产品线':'总价格']    #通过标签值切片    

#查找重复项
for i in dt['cc']:
    count = 0
    for j in dt['cc']:
        if i==j:
            count +=1
    if count>1:
        print(i,':',count)
    else:
        print('没有重复项')
        
#修改dataframe列名
# ④暴力(好处:也可只修改特定的列)
df.rename(columns=('$a': 'a', '$b': 'b', '$c': 'c', '$d': 'd', '$e': 'e'}, inplace=True) 
# ⑤修改
df.rename(columns=lambda x:x.replace('$',''), inplace=True)
#修改列名
df.rename(columns={'原列名':'新列名'},inplace=True)
df.columns.values.tolist()     #查看列名

#列名
df['mon']=da2['年月']
df['num']=da2['sum']['数量']
df['rmb']=da2['sum']['价格']

#画图
df.plot(secondary_y=['rmb'])
plt.show()
"""
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值