pandas、numpy & mysql

pandas 连接mysql

 

import pandas as pd #导入模块
import sqlalchemy #导入模块

sql='select * from 表名' # 选取表

engine = sqlalchemy.create_engine('mysql+pymysql://root:密码@localhost:3306/数据库名') #引擎

df = pd.read_sql(sql,engine) # 读取

 


转csv格式

df.to_csv('userinfo.csv',index=False,encoding='utf-8')

 新增数据到 mysql

df1.to_sql('stu',engine,index=False,if_exists='append')

pandas的常用语法

默认df接收被读取的表格 :df=pd.read_excel(filepath)

key为关键字    


语法功能说明
索引选取、筛选

df.loc

  • 特定-离散
    • df.loc[1]
    • df.loc[1,2]
  • 切片-连续
    • df.loc[1:10:2] 左闭右闭
  • 指定关键字
    • df.loc[1:10:2,"key"]
    • df.loc[1:10:2,["key1","key2"]]
  • 指定条件
    • df.loc[筛选条件]
    • df.loc[筛选条件,1:10:2]
df.iloc
  • 用法同loc
  • 左闭右开
df.set_index('key')
  • 设置某关键字为索引
df[筛选条件]
  • 如:df[df['年龄']>18]
df['new_key'] = value
  • 增加一列 ,=默认值
del df['key']
  • 删除一列
df.drop(labels=0)
  • 删除行,labels 是行列的名字,默认axis=0删除行,为1则删除列
df['key'] = df["key"].map({"})
  • 修改一列的值 , map 函数
  • df.sex = df['sex'].map({'男':'female','女':'male'})

df.replace() 或

df.key.replcae()

  • 修改一列的值
  • df.replace({'key':{'old_value':'new_value'}},inplace=True)
  • df.key.replcae({old_value':'new_value'},inplace=True)
  • inplace=True 确认替换
df
  • 显示表格
df.columns
  • 显示字段名
df.columns=[‘key1’,'key2','key3','key4']
  • 修改字段名
  
df.key等价于 df["key"]
  • 筛选字段
df.key.unique()
  • 筛选指定字段的值
df.key.value_counts()
  • group by 某字段,并统计次数
df.sort_values('key')
  • 对数据进行排序
    • df.sort_values('key') 单个
    • df.sort_values(['age','height'],ascending=[True,False]) 多个
    • ascending=true,升序;False:降序
df.sort_index()对索引排序
df.max()\min()\sum()\mean()
  • 每一列的聚合函数:最值、求和、均值
df.idxmax()
  • df.idxmax(0) 每列最大值的索引值
  • df.idxmax(0) 每行最大值的列名
df.cusum()
  • 累加求和
  • df.cusum(axis=0)对行累加
  • df.cusum(axis=1)对列累加
df-1 df+1 df *2 df/2
  • 对表格每个值做四则运算
  

 

pandas 、numpy 与 mysql 的语法对比

默认df接收被读取的表格 :df=pd.read_excel(filepath)           

 

pandas

mysql

导入pandas  import pandas as pd 
拼接

df.concat([,], 

        ignore_index=True,
        axis=1 or 0)

union
关联

pd.merge(left,right,on='key')

pd.merge(left, right, on=['key1', 'key2']) 

pd.merge(left, right, how='left', on=['key1', 'key2'])

pd.merge(left,right,left_index=True,right_index=True)

left 、right 、full outer join on a= and b=
取前N行df.head(N) limit 
删除列del df["na"] 

显示

字段名

df.columns   

显示

行,列数

df.shape #(行,列数) 

显示

某列去重后的数据

df.key.unique()distinct key
填充na为0df.fillna(0)

 

 

分组DataFrameGroupBygroups=df.groupby('key')groupby
分组后列出数值和计数、类型(少用)groups.groups 
显示某列去重后的数据 并计数df.key.value_counts()distinct key,count(1)
分组后并各组计数groups.size()   
分组后计算组数len(groups)   

分组后的组名,

每组的内容

for name,group in groups: #
    print(name) 
 

分组并计算

某类聚合值

groups.mean()、sum()、min()、max()#所有列

groups.key.mean().head() #指定某列前N行分组后的均值

 

对分组后的数据统一转换-同组数据相同

(行数不变)

 

transfrom(自定义四则运算的函数,或者聚合函数),如:

s_score = lambda s : (s-s.mean())/s.std()

groups = df.groupby("district")
groups[['age','novip_buy_times','novip_buy_moneys']].transform(s_score)

新字段(四则运算)
新增字段(四则运算,含transform)

【应用:分组计算比例】

df['vip_buy_times_percent'] = df['vip_buy_times']/groups['vip_buy_times'].transform('sum')

新字段(四则运算)
分组后过滤df2 = groups.filter(lambda g : g['vip_buy_moneys'].mean() >= 1000)having
   
 

numpy

mysql

导入numpyimport numpy as np #使用numpy模块 多维矩阵   

分组并计算

多类聚合值

# 所有列

groups.agg([np.mean,np.sum,np.std]) #3维 (均值、求和、标准差)

# 具体列
groups.age.agg([np.mean,np.sum,np.std]).head()

 
   
透视表

pandas 与 numpy 运用 

 
导入pandas 和 numpy

import pandas as pd

import numpy as np

 
pd.pivot_table()

pd.pivot_table(df,values = ['novip_buy_times','vip_buy_times'],index = ['district'],aggfunc=[np.sum,np.mean]) 

[2*2]维

 

 

 

 

 

 

 

 

     

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值