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.iloc |
|
df.set_index('key') |
|
df[筛选条件] |
|
df['new_key'] = value |
|
del df['key'] |
|
df.drop(labels=0) |
|
df['key'] = df["key"].map({"}) |
|
df.replace() 或 df.key.replcae() |
|
df |
|
df.columns |
|
df.columns=[‘key1’,'key2','key3','key4'] |
|
df.key等价于 df["key"] |
|
df.key.unique() |
|
df.key.value_counts() |
|
df.sort_values('key') |
|
df.sort_index() | 对索引排序 |
df.max()\min()\sum()\mean() |
|
df.idxmax() |
|
df.cusum() |
|
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为0 df.fillna(0)
分组DataFrameGroupBy groups=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
导入numpy import 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]维