| pandas | 注释 |
|---|---|
| df.column / df[cloumn] | 选取列;当选取多列是采用嵌套列表形式[[‘x’ , ‘y’]] |
| df = pd.read_csv(参数) | path:指明所需读取表格所在的文件路径。若不在同一文件夹,需要右键表格属性,查看表格路径,在文件路径前加r; sep:分隔符,常见为逗号,如sep=“,”; usecols:返回指定的列,如usecols=[“曝光数”,进店数] |
| df = pd.read_excel(参数) | sheet_name:指定要读取的sheet,如sheet_name=‘sheet2’; index_col:指定菜列为索引,如index_col=‘日期’; usecols:返回指定的列,如usecols=[“曝光数,”'进店数] |
| pd.unique(df.column | 对单个字段去重,如unique(cpc.日期) |
| pd.drop_duplicates() | 对多个字段去重,如drop_duplicates([“曝光数,”'进店数])。若对整个DataFrame去重,如cpc.drop_duplicates() |
import numpy as np
import pandas as pd
import pymysql
# 显示最大行列到9999 即显示所有行列 不然会以省略号展现
pd.set_option('display.max_rows', 9999)
pd.set_option('display.max_columns', 9999)
# 显示小数位数是3位
pd.set_option('display.float_format', lambda x: '%.2f' % x)
# 读取数据
cpc = pd.read_csv('./cpc.csv', sep=',', encoding='gbk')
# 筛选门店名称且去重 选字段-->去重-->以Series格式返回
name_unique = pd.Series(pd.unique(cpc['平台门店名称']))
# print(name_unique)
# 筛选出平台门店名称以及计算下单率(门店下单量/门店访问量)
# round函数是将数字四舍五入至合适的小数位数
# map函数通过将指定的function函数依次作用在给定序列iterable中的每一个元素上,可用于类型转换
cpc['符号'] = '%'
cpc['下单率'] = (round(cpc.门店下单量 / cpc.门店访问量, 1)*100).map(str)
cpc['下单率'] = cpc['下单率'].str.cat(cpc['符号'])
print(cpc['下单率'])
知识点2:where条件筛选Series.str的方法:
cat()用于拼接字符串,拼接内容要是列表形式 且列表个数个待拼接的列表个数要一致
| pandas | 注释 |
|---|---|
| df.query(‘column>x’) | 通过字符串表达式对列进行筛选 |
| df[df.column.between(x,y)] | |
| df[df.column.isin([x,y,z,…])] | 判断指定字段中的值是否包含在所传入的列表中,并返回布尔值的Series |
| df[df.column.isnull()] | 检测字段缺失值 |
df.query(‘x| &表示与,一杠表示或 | |
# 查找gmvroi>7 且 gmvroi<8的门店ID和名字
query_gmvroi = cpc.query('gmvroi>7.0 & gmvroi<8.0')[['门店ID', '平台门店名称']]# 选取多列要用嵌套方括号
# 查找门店gmvroi等于[7,8]的门店ID和名字
query_gmvroi2 = cpc[['门店ID', '平台门店名称']][cpc.gmvroi.isin([7.0, 8.0])]
# 下面写法是错的 cpc.gmvroi.isin([7.0, 8.0])返回的是布尔值不能再索引了
# query_gmvroi3 = cpc.gmvroi.isin([7.0, 8.0])[['门店ID', '平台门店名称']]
# 模糊查询 like:查找名称带有宝山的门店
# 下面两行返回的是布尔值
# name = cpc['平台门店名称']
# name_baoshan = name.str.contains('宝山')
name_baoshan = cpc['平台门店名称'][cpc.平台门店名称.str.contains('宝山')].unique()
# print(name_baoshan)
# cpc[”平台门店名称’]: select 平台门店名称
# []内cpc: from
# 平台门店名称.str.contains(宝山'):平台门店名称like '%宝山%’
# unique(): distinct
# pd. Series:将结果转换为Series类型 pd. Series(cpc['平台门店名称'][cpc.平台门店名称.str.contains('宝山')].unique()) 不加类型转换生成列表
知识点3:聚合函数
# 查找各个门店的平均实收
avg_store = cpc.groupby('平台门店名称').agg(平均实收=('门店实收', 'mean'))
# cpc: from
# groupby ('平台门店名称’): group by平台门店名称
# agg(平均实收=(门店实收', 'mean')): avg(门店实收)as 平均实收
# 最终结果会显示所有提到的字段
# 查找实收>10k的门店名称 与 实收,按实收降序
store = cpc.groupby('平台门店名称').agg(总和=('门店实收', 'sum')).query('总和>10000').sort_values(by= '总和', ascending=False)
知识点4:子查询
先做出子查询的筛选条件
a = df1.query(“value1 == x”)[‘value1’]
再将条件放入isin()方法中
b = df2[‘column’][df2[‘value2’].isin(a)]
————————————
SQL语句相对应:
select column from df2
where value2 in (select valuel from df1 where valuel = x)
# 查找实收(cpc.csv)> 1K的门店名称
# 子查询条件
a = cpc.query('门店实收>1000').门店ID
#将条件放入isin中
b = cpc['平台门店名称'][cpc['门店ID'].isin(a)].unique()
知识点5:表格的合并
合并表格
# 合并Excel表格
#当想要合并不同的Excel表格(注意,要保证每个Excel表格的字段相同哦>import numpy as np
import os
# 1、path:选择Excel表格所在路径
path = './test/'
# 2、files = []:创建一个空列表,将路径中,文件or文件夹的名字装入列表print(files)
files = [i for i in os.listdir(path)]
# 3、查看是否正确,如:['test1','test2']
print(files)
# 4、创建一个空的DataFrame
Merge = pd. DataFrame()
# 5、for:循环遍历我们的名称列表(2)
for i in files:
# 6、read_excel (path+i):读取第files[i]份表格。如当i=0, files[0]='sheet'
df = pd.read_excel(path+i)
# 7、concat:将df内容拼接至.Merge内
Merge = pd.concat([Merge, df])
# 8、to_excel:遍历结束后,输出我们合并后的表格
Merge.to_exce1(path+'excel合并.xlsx', index=None)
合并一个表格的sheet
# 当想要合并同一张Excel装格内的所有sheet(注意:要保证每个sheet的子段相同哦)
# 1、ExcelFile:传入Excel表格
name_list = pd.Exce1Fi1e(' ./test/学习名单3.x1sx')
# 2、创建一个空DataFrame
df_list = pd. DataFrame()
# 3、for:循环遍历我们的名称列表(⑴
for sheet in name_list.sheet_names:
# 4、name_list的属性parse:读取sheet中的内容
df = name_list.parse(sheet_name=sheet)
# 5、apperxl:我们将读取到的sheet内容,附加到df_list中
df_list=pd.concat([df_list, df])
# 6、将df_list中的内容按行合并,输出
df_list.to_exce1('./test/sheet合并.x1sx' ,index=False)
# ExcelFile():传入一个表格的路径,并赋予一个对象。
# sheet_names:他是ExcelFile()的一个方法,将Excel子工作表的名字以列表形式返回#parse:他是ExcelFile()的一个方法
# 参数sheet_name:传入子工作表的名称,可以读取里面的内容
Series.str的用法参考https://blog.csdn.net/yishail/article/details/106960500



