连接SQL&用SQL语句取数
import pymysql
import pandas as pd
date_base=pymysql.connect(host=,
port=,
user=,
password=,
database=,
charset='utf8')
date=pd.read_sql("""SQL语句""",date_base)
#使用SSH连接数据库
import pymysql
from sshtunnel import SSHTunnelForwarder
with SSHTunnelForwarder(
(IP_B, Port_B), # 跳板机(堡垒机)B配置
ssh_password=password_B,
ssh_username=username_B,
remote_bind_address=(IP_C, Port_C)) as server: # 数据库存放服务器C配置
# 打开数据库连接
db_connect = pymysql.connect(host='',
port=,
user=,
passwd=,
db=)
#用元组的方式取出数据
cur = sevend_ku.cursor()
cur.execute(sql)
dbRet = cur.fetchall()
pandas 排序&去重
import pandas as pd
data=pd.DataFrame()
date.sort_values(['columns1','columns2'],ascending=[True,False])
date.drop_duplicates(['columns1','columns2'], 'last')
pandas group by 方法
#使用内置函数进行聚合
dataframe.groupby('columns1').agg({'columns2':['max','min'],'columns3':['mean','avg']})
#使用自定义聚合方式进行聚合
#如非重复数值计数
def count_nunique(S):
return S.nunique()
dataframe.groupby('columns1').agg(count_nunique)
#求和后以万为单位且保留两位小数:
def sum_w(S):
return round(S.sum()/10000,2)
dataframe.groupby('columns1').agg(sum_w)
#定义匿名函数实现聚合后求极差的方法:
df.loc[:,["average_monthly_hours","department"]].groupby("department")["average_monthly_hours"].apply(lambda x:x.max()-x.min())
pandas 透视表及自定义聚合方法的运用
#透视表
data_pt=pd.pivot_table(原始数据,index=['纵坐标1','纵坐标2'],columns='横坐标',values='值',aggfunc=聚合方式,fill_value=空值填充方式,margins=True)
#自定义聚合方式
def sum_w(S):
return str(round(S.sum()/10000,2))+'w'
pd.pivot_table(result,index=['催收结果'],values=['remain_principal','order_no'],aggfunc={'remain_principal':sum_w,'order_no':'count'},fill_value=None,margins=True)
#将透视表中的数据转换成百分比
collect_total_pt11=collect_total_pt1.copy()
for col_name in collect_total_pt11.columns[2:]:
collect_total_pt11[col_name]=collect_total_pt11[col_name]/collect_total_pt11.loc[12,col_name]
collect_total_pt11[col_name]=collect_total_pt11[col_name].apply(lambda x:format(x,'.2%'))
日期操作
#日期的输入
from datetime import datetime
date=datetime(2019,5,30)
#任意日期加上指定天数
date+pd.to_timedelta("