引言
就数据产品经理岗位而言,核心有用的是能掌握pandas的数据分析,数据科学相关,所以学习主要是这两大块:
-
python的基础知识
-
python中pandas模块知识
本章是python基础知识
主要就是按如下结构
-
基础知识
-
01-数据类型和变量
-
02-输入和输出
-
03-条件判断
-
04-循环控制
-
05-列表和元组
-
06-字典和集合
-
07-函数与模块
-
08-文件处理
-
01-数据类型和变量
"""D1:变量与数据类型
核心知识
变量命名规则(禁止关键字,如class)
数据类型:int/float/str/bool
类型转换:int("123") → 123
练习任务
计算圆的面积(输入半径,输出面积,保留2位小数)
实现字符串拼接:"2023-09-01" → "2023年09月01日"
"""
from decimal import Decimal, getcontext
getcontext().prec = 28
#关于整数 int
m=23
n= -1
s= 0
print(m*3+n*3+s*3)
#关于浮点数 float
fo=5.541
te=45.568
jie=fo+te
print(jie)
#输出结果是51.108999999999995,浮点数在计算机种存储时存在精度限制,这意味着某些浮点数无法精确表示,所以就会出现这个结果的计算问题
#要解决的话,需要使用到decimal来解决,数字需要加上引号,来做到转str
a=Decimal('5.541')
b=Decimal('45.568')
t=a+b
print(t)
#如果用变量的话,那就得转str
tt=Decimal(str(fo))
ss=Decimal(str(te))
print(tt+ss)
#关于字符串 str
#单引号‘ 和双引号 “ , 括起来内的任意文本,字符串
# \这个是转义符,只是对它后面的一个字符串转成本身
str1 = 'I am ok!'
str2 = ' "I\\\'m ok!" -'
str3 ='tru\n,ok change'
str4 =r'tru\\n,ok change'
# r'' 这个可以默认字符串不转义
print(str1)
print(str2)
print(str3)
print(str4)
print('''index1
index2
index3''')
#加了r ,让\n 转义不生效
print(r'''index1,\n
world''')
#不加r
print('''index1,\n
world2''')
#关于布尔值 bool
#只有True和False 两种, 可以用and or not 运算,
print(3>2)
print(2<1)
# and 与运算,只有所有都是True, and 后才是True
print(3>2 and 3>1)
# or 或运算,只要其中一个是True ,结果就是True
print(3<2 or 3<1)
# not 非运算
print(not False)
age =3
if age>=19:
print('ais')
else:
print('ont')
####***变量 = 是赋值语句
a= 123
print(a)
a='ADD4'
print(a)
a='ABC' #创建一个变量a 创建一个字符串'ABC' 将a指向字符串’ABC‘
b=a #创建一个变量b,并把b 指向 a指向的字符串’ABC‘
a='ccc' #创建字符串’ccc‘ ,并把a的指向改为’ccc‘
print(b)
#常量
print(10/3) #结果是浮点数,精确除
print(10/2.0) #结果是浮点数,精确除
print(10.0//3)
print(10//3) #结果是整数,地板除,整数的除法结果还是整数
print(12.0//3.0) #结果是浮点数,地板除,浮点数的除法结果还是浮点数
#**********************总结
"""
总结:
数据类型
1.几种数据类型,int,float,str ,bool
2.str的转义 \ 符号, 不转义r''
3.浮点数的加减的精度问题,用Decimal来解决,需要先转str 在放入Decimal使用
4.bool的三种运算,经常用来做if 判断的用 True 和False
变量
1.变量的赋值 =
2.变量的指向
"""
02-输入和输出
"""
1. 直接使用 print() 函数
最基础的方式,适用于简单调试和输出变量值。
示例:
name = "Alice"
age = 25
print(name) # 输出:Alice
print(name, age) # 输出:Alice 25(默认空格分隔)
print(f"{name}") # 输出:Alice(与 f-string 结合)
2. 字符串格式化
(1) % 格式化(旧式)
print("Name: %s, Age: %d" % (name, age)) # 输出:Name: Alice, Age: 25
占位符:%s(字符串)、%d(整数)、%f(浮点数)。
(2) str.format() 方法
print("Name: {}, Age: {}".format(name, age)) # 输出:Name: Alice, Age: 25
print("Age: {1}, Name: {0}".format(name, age)) # 按索引位置
(3) f-string(Python 3.6+ 推荐)
print(f"Name: {name}, Age: {age}") # 输出:Name: Alice, Age: 25
print(f"Next year age: {age + 1}") # 支持表达式
print(f"Name: {name.upper()}") # 支持方法调用
3. 交互式环境直接输出
在 Python Shell / Jupyter Notebook 中,直接输入变量名可显示值:
'Alice' # 自动输出变量值
4. 使用 repr() 和 str() 函数
str():返回用户可读的字符串表示。
repr():返回解释器可读的精确表示(常用于调试)。
s = "Hello\nWorld"
print(str(s)) # 输出:Hello
# World
print(repr(s)) # 输出:'Hello\nWorld'
5. 多变量解包输出
快速输出元组、列表中的多个变量:
values = ("Alice", 25, "Engineer")
print(*values) # 输出:Alice 25 Engineer
6. 重定向到文件
将变量内容写入文件而非控制台:
with open("output.txt", "w") as f:
print(name, age, file=f) # 内容写入文件
7. 使用日志模块(logging)
适合记录程序运行时的变量状态(如调试信息):
import logging
logging.basicConfig(level=logging.INFO)
logging.info(f"User: {name}, Age: {age}") # 输出到日志
对比总结
方法 优点 缺点 适用场景
print() 简单直接 无法灵活控制格式 快速调试
f-string 语法简洁,支持表达式 仅限 Python 3.6+ 复杂字符串拼接
str.format() 兼容性好,支持位置索引 语法略繁琐 兼容旧版本代码
logging 可分级记录日志 配置复杂 生产环境日志记录
文件重定向 持久化保存输出 需要文件操作权限 数据保存/报告生成
高级技巧
控制浮点数精度:
pi = 3.1415926
print(f"Pi: {pi:.2f}") # 输出:Pi: 3.14
格式化对齐:
print(f"{'Name':<10}{'Age':>5}") # 输出:Name Age
print(f"{name:<10}{age:>5}") # 输出:Alice 25
输出不换行:
print("Loading", end="...") # 输出:Loading...
根据需求选择合适的方式,日常开发中 f-string 和 print() 组合使用最为高效!
"""
# 计算BMI指数
height = 1.83 # 米
weight = 78.5 # 千克
bmi = weight / (height ** 2)
print(f"BMI指数为:{bmi:.2f}")
print('OK')
print('te')
#这个是练习任务,为了熟悉怎么上传到github。
#关于输出
print('hello world')
#关于输出,设置变量接到输入的内容,并用做后续可以打印,或者直接使用
#name = input()
names="luck"
#变量输出的几种方式,
#最基础的print()函数使用
print('hello,',names)
#这name前有空格,是因为print函数的默认分隔符,这个完整的语句是print('hello', name, sep=' ')
#若想不带分隔符,可以直接用+,sep=''
print('hello,'+names)
print('hello,',names,sep='')
print(names,height)
print(names, height)
#
#关键区别:代码中的逗号后的空格是代码格式,而 print() 输出的空格是参数分隔符(由 sep 参数控制)。
#代码中的空格仅影响代码可读性,与运行时无关。
#输出的空格由 sep 参数决定,默认是 ' '
print(f"{names}")
#字符串格式化
# %格式化,相对旧式
s='go'
d=33
f=330.08003
print("name:%s, height:%s, ff:%s "%(s,d,f))
print("name:%s, height:%d, ff:%f "%(d,d,f))
#在 Python 的字符串格式化中,使用 %f 输出浮点数时,默认会保留 6 位小数,因此像 334.4 会被格式化为 334.400000
#通过 %.Nf 指定保留 N 位小数:
print("1ff:%.1f"%f)
print("2ff:%.2f"%f)
#通过%g 自动省略末尾零,可能用科学计数法
print("gff:%g"%f)
print("name:%s, height:%s, ff:%s "%(s,d,f))
#(2) str.format() 方法
nige='caiji'
gaom='ee'
print("Name: {},tst:{}".format(nige,gaom))
print("Age: {1}, Name: {0}".format(names, d))
print("nae:{}".format(d))
#(3) f-string(Python 3.6+ 推荐)
print(f"Name: {names}, Age: {d}") # 输出:Name: Alice, Age: 25
print(f"Next year age: {d + 1}") # 支持表达式
print(f"Name: {names.upper()}") # 支持方法调用
pi=3.14159265358979323846
print(f"PI:{pi}")
#如何把pi打印正确呢?
print(f"{'name':<10}{'d':>5}")
print(f"{names:<10}{d:>5}")
print(f"name:{d+34}")
"""
---总结
1.今天的学习内容关于输入输出的,
**输入**
输入的好说,平时也用的少,不会说单独交互式的用input的内容,大多会用其他数据导入excel 或者csv的数据形式把大批数据导入进来
**输出**
输出的几种格式学习并练习了下,也发现一些细节点
1.旧式用的,也是现在我比较熟悉用的 %s 这种方式的,现在也知道还有其他类型的对应,比如%d整数型 ,%f浮点型,还有%g 可以自动去除0,可能会造成科学计数法的
这个方式需要改掉了,可能会有几个数据类型显示的问题在里面,显示的空格问题,若不明确,或者用错了,会造成报错,
2.第二种format的这种方式,可以调整顺序使用的,用的也不是很多,在拼接多个变量的时候,语句会变的很长,
3.第三种是现在退件的语法简洁,支持表达式,适用复杂字符串拼接的,但是版本上面有限定,需要python3.6以上
"""
03-条件判断
"""D2:条件判断
核心知识
if-elif-else结构
逻辑运算符:and/or/not
三元表达式:x = a if condition else b
练习任务
编写天气提示程序:温度>30℃提示“注意防晒”,<10℃提示“多穿衣服”
用三元表达式判断数字奇偶性
代码示例
python
复制
# 成绩评级程序
score = 85
if score >= 90:
grade = "A"
elif score >= 80:
grade = "B"
else:
grade = "C"
print(f"成绩等级:{grade}")
"""
#if 的判断是从上往下的,,如果某个判断了为True,就会把对应的语句执行后,忽略剩下的elif 和else了,
#m=int(input('pls input your age:'))
m=3
if m >= 18:
print('you are a adult')
elif m<6:
print('you are a kid')
else:
print('oh,you are a teenager')
h=1.75
w=80.5
bmi=w/(h*h)
print(bmi)
if bmi<18.5:
print('过轻了哦')
elif 18.5 <= bmi < 25:
print('正常')
elif 25 <= bmi <28:
print('过重')
elif 28<= bmi <32:
print('肥胖')
else:
print('严重肥胖')
#三元表达式:x = a if condition else b
test= 32
on =1
to = 1 if test<on else 999
print(to)
score =80
match score:
case x if x<=60:
print('不及格')
case x if 60<x<=80:
print('及格')
case x if x>80:
print('优秀')
case _:
print('太棒')
"""
**条件判断使用的很频繁,语法if elif else ,注意缩进
"""
04-循环控制
"""D3:循环控制
核心知识
for循环:遍历列表/字符串/range
while循环:带退出条件
循环控制:break/continue
练习任务
打印九九乘法表(嵌套循环)
计算1-100的偶数和
资源
图解循环:Real Python Loops
代码模板:
python
复制
# 斐波那契数列(前10项)
a, b = 0, 1
for _ in range(10):
print(a, end=' ')
a, b = b, a + b
"""
#循环打印字符串
lisdt=['niko','andi','lucy']
for name in lisdt:
print(name)
sum=0
for x in [1,2,3,4,5]:
sum+=x
print(sum)
#print(list(range(101)))
sums=0
for x in range(101):
sums+=x
print(sums)
#while 循环
start =0
sum=0
while start<=100:
sum+=start
start+=1
print(sum)
#break 提前退出循环
n=1
while n <=100:
if n>10:
break
print(n)
n+=1
#continue
n=0
while n<10:
n+=1
if n % 2 == 0:
continue
print(n)
#求100内的偶数和
n=0
sum=0
while n<100:
n+=1
if n % 2 == 0:
sum+=n
print(sum)
#99乘法表,格式对齐咯
m=1
while m<=9:
n=1
content=''
while n<=m:
if n ==1 or m in [2,3] or (n==2 and m ==4):
content += f"{n}*{m}={n * m} "
else:
content+=f"{n}*{m}={n*m:>2} "
n+=1
print(content)
m+=1
05-列表和元组
"""D2:列表和元组
核心知识
列表是一种内置的数据类型, list,是一有序的集合,可以随时添加删除其中的元素
"""
#列出名字
home=['pyhton','tina','lubin']
print(home)
#len() 获取list元素的个数
print(len(home))
#用索引来访问列表的种的元素,索引是从0开始的
print(home[0])
print(home[1])
print(home[-1])
#append()是列表的方法,只能添加单个元素,只能添加到末尾
home.append('macal')
home.append(['A01','A02']) #可添加任意数据类型元素,添加一个子列表
#添加多个元素,extend() 可 要有[] 包住添加的元素; 或 +=
home.extend(['tiadi','gek','end'])
home+=['taidi','nigo']
#要插入到指定位置 用insert()
home.insert(0,'first')
print(home)
#删除元素用pop(),默认删除最后一个,可加入索引,表示删除哪个索引位置的元素
home.pop()
home.pop(5)
print(home)
#元组 tuple,有序的列表,初始化后就不能修改
ahome=('laoda','laoer','laosan')
t=()
m=(1,)
print(ahome)
"""
**总结
关于内置的数据类型 列表和数据
列表 list
关于新增,插入,多个插入,移除,取数,等
元组,初始化后就不能再变更元素
"""
06-字典和集合
"""D4:数据结构
核心知识
数据结构 特性 常用操作
列表 有序,可修改 append()/pop()/切片
元组 有序,不可修改 索引访问
字典 键值对,快速查找 keys()/items()
练习任务
统计一段英文文本中各字母出现次数(忽略大小写)
实现购物车功能:支持添加/删除/清空商品
代码示例
python
复制
# 词频统计
text = "Hello world hello python"
words = text.lower().split()
word_count = {}
for word in words:
word_count[word] = word_count.get(word, 0) + 1
print(word_count) # 输出:{'hello':2, 'world':1, 'python':1}
"""
#day4的内,在day1中扩展的时候 有部分涉及到了
#关于字典,也叫键值对 key-value存储,具有极快的查找速度
d={'sidy':40,
'bob':44,
'tina':43}
print(d['sidy'])
for x in d:
print(d[x])
if 'tony' in d:
print('yes')
else:
print('no')
#获取dict的某个key,若没有,默认为none,也可以指定返回信息
print(d.get('bob','no this one'))
#直接在后面追加字典的key value
d['bso']=32
d['lucy']=99
print(d)
#删除某个key
d.pop('bso')
print(d)
#set 和dict 类似,但不能存储value,只有key,不可重复
s={1,2,3}
print(s)
# set 会自动过滤重复
s1= {1,2,3,4,5,4,3,5,6,7}
print(s1)
#set 的添加用add
s1.add(23)
print(s1)
#set 的删除使用revome
s1.remove(3)
print(s1)
s2=set([1,2,34])
print(s2)
"""
总结
学习了dict 字典 和set
字典的key value,不能重复,添加,删除用pop,,判断是否有get,定义返回值
set 的 添加add 删除remove,
"""
#词频统计
text = "Hello world hello python"
words = text.lower().split()
word_count = {}
for word in words:
word_count[word] = word_count.get(word, 0) + 1
print(word_count)
text ='hello this is a beautiful world do you want do this your love the world is beautiful'
text_list =text.lower().split()
words={}
for word in text_list:
words[word]= words.get(word,0)+1
print(words)
#实现购物车功能:支持添加/删除/清空商品
pre_buy=[]
#添加
newsku1='牙刷'
newsku2='毛巾'
newsku3='牙膏'
pre_buy.append(newsku1)
pre_buy.append(newsku2)
pre_buy.append(newsku3)
print(pre_buy)
print(pre_buy.index(newsku1))
#删除
pre_buy.pop(pre_buy.index('牙刷'))
print(pre_buy)
#清空
pre_buy=[]
print(pre_buy)
07-函数与模块
"""D5:函数与模块
核心知识
函数定义:def func(param):
参数类型:位置参数/默认参数/可变参数
模块导入:import math / from utils import calc
练习任务
编写计算器函数:支持加减乘除(处理除零错误)
创建自定义模块my_math.py,包含平方和立方函数
调试技巧
使用print()或VS Code断点调试
常见错误处理:
python
复制
try:
10 / 0
except ZeroDivisionError as e:
print(f"错误:{e}")"""
from utils import cals,my_powers
#函数的调用
print(abs(-1))
#数据类型转换的函数
print(abs(int('123')))
s=float('12.44')
ma=str(1.23)
print(ma)
print(hex(9))
#定义函数
#使用def 语句,依次写函数名 括号,参数 冒号,然后在缩进体里面写,返回值用return 语句返回
def my_abs(x):
if not isinstance(x,(int,float)):
raise TypeError('bad operand type')
if x>0:
return x
elif x<0:
return -x
else:
return 0
print(my_abs(3.45))
#参数类型:位置参数/默认参数/可变参数, 需要按位置顺传递进来
def my_power(x):
return x*x
print(my_power(3))
#默认函数,给参数默认值,调用时不传就用默认值, 传了就用传入值
def my_power2(x,n=2):
s=1
while n>0:
n=n-1
s=s*x
return s
print(my_power2(5,5))
print(my_power2(5,3))
#可变参数,传入的参数是不确认的,个数是可变的
def output(*list):
tent=''
for x in list:
tent = tent + f"{x} -"
return tent
names=['bob','tina','lubins','ahuadu']
print(output(*names))
print(output(2,3,4,5,5,6,4))
print(output())
#关键字参数, **kw, 把传入的关键组参数自动组装为dict
def per(name ,age,**other):
print(f"name:{name},age:{age},other:{other}")
per('timo','30',sex='boy')
"""
总结:
今天是对函数有个理解,
从函数的调用,
函数的定义, def 语法, 函数名,括号,参数等,冒号,缩进体,return 返回信息
函数的参数有哪些,函数的参数有位置参数,默认参数,可变参数,关键字参数等
"""
#------
#调用其他模块文件的函数
print(cals(1,3,'+'))
print(my_powers(2,3))
print(cals(3,4,'*'))
#调用其他模块的计算器函数
if __name__ == "__main__":
tests = [
(5, 3, '+', 8),
(5.5, 2, '-', 3.5),
(4, 2.5, '*', 10.0),
(10, 4, '/', 2.5),
(7, 0, '/', "错误:除数不能为零"),
(5, "a", '+', "错误:输入必须为数字类型"),
(9, 3, '%', "错误:仅支持 + - * / 运算符")
]
for num1, num2, op, expected in tests:
output = cals(num1, num2, op)
status = "✅" if output == expected else "❌"
print(f"{status} 输入:{num1} {op} {num2} | 输出:{output} | 预期:{expected}")
"""
总结,参考写了模块文件,及其对应的函数,并实施调用
在模块文件中加入了测试用例,以保证模块中函数的健壮
思考,这种思维能否用到工作的 python代码中去呢,监控或者飞书邮件,自测试
"""
08-文件处理
"""D6:文件操作
核心知识
文件模式:r(读)/w(写)/a(追加)
CSV处理:csv.reader() / csv.DictReader()
JSON序列化:json.dump() / json.load()
练习任务
将D4的购物车数据保存到JSON文件
读取CSV文件并统计各列数据分布
资源
数据集:样例CSV文件
代码模板:
python
复制
# 自动备份日志文件
import shutil
shutil.copy('app.log', f'backup_{datetime.date.today()}.log')"""
import json
import pandas as pd
#open()/read()/write() 这些是针对文本和二进制文件的
#文件的覆盖写入
with open('files/demo.txt',"w") as f :
f.write("no i replace all the content.\n")
#文件的追加
with open('files/demo.txt',"a") as f :
f.write("this is second line content.\n")
# 仅仅是txt文件的读
import os
with open('files/demo.txt', 'w') as f:
f.write("Sample content.\n")
with open('files/demo.txt', "r") as f:
content = f.read()
print(content)
data={
"name":'bob',
"age":'34',
"sex":"man"
}
print('11',type(data))
with open("files/data.json","w")as f:
json.dump(data,f,indent=0)
with open("files/data.json","r")as f:
loads=json.load(f)
print(loads)
with open("files/dept.json","r")as f:
loads=json.load(f)
print(loads)
json_str=json.dumps(data)
print(json_str)
print('22',type(json_str))
python_obj = json.loads('{"name": "Bob", "age": 30}')
print(python_obj["name"]) # 输出 Bob
print(python_obj)
print("333",type(python_obj))
df=pd.read_json("files/dept.json")
print(df)
code ='f'
with open("files/dept.json", "r") as f:
existing_data = json.load(f)
print(existing_data)
json_list = [item for item in existing_data if item["code"] == code]
#print(json_list.index())
print(existing_data[2]['dept'])
#关于CSV 的文件处理, 目前也是用的很频繁。
#大多数都是导出csv文件,这个也和dataframe一起用比较多,
import csv
import pandas as pd
#单独使用csv模块进行csv的读写
data=[
['序号','问题','提出人'],
['1','question1','bob'],
['2','为啥会有两','钟馗'],
]
#with open('files/data.csv','w') as f:
# newline='' 的作用是为了禁用换行符自动转换,避免 Windows 系统出现空行问题;
# writerows(data) 批量写入
with open('files/data.csv','w',newline='',encoding='utf-8') as f:
writer=csv.writer(f)
writer.writerows(data)
#读取csv 文件
with open('files/data.csv','r',newline='',encoding='utf-8') as f:
reader=csv.reader(f)
for row in reader:
print(row)
#pandas的方法
#创建dataframe的一种方法,确认列表头,确认行内容,在往dataframe插入
# 表头是一个列表的形式,数据行也是一个列表的形式,但必须要是完全一致的才行,不然会被末尾填充none
col= ['序号','问题','提出人']
data1=[
['3','问题3','提出人3'],
['1','question1','bob'],
['2','为啥会有两','kong'],
['5','为两','lima22o'],
]
df=pd.DataFrame(data1,columns=col)
print(df)
# 若是一个完整的列表的列表,也就是二维列表的话,可以分开列头和数据行,然后填充进dataframe,
data2=[
['序号','问题','提出人'],
['3','问题3','提出人3'],
['1','question1','bob'],
['2','为啥会有两','kong'],
['5','为两','lima22o'],
]
cols = data2[0]
datah=data2[1:]
df2=pd.DataFrame(datah,columns=cols)
print(df2)
df2.to_csv('files/pd.csv',index=False)
#还有比较常用的是用字典列表的形式,往dataframe 写入数据
datas = [
{"Name": "Charlie", "Age": 28, "City": "Paris"},
{"Name": "Diana", "Age": 22, "City": "Tokyo"}
]
pdf=pd.DataFrame(datas)
print(pdf)
#索引不写入,保证编码是utf-8不产生乱码,写入的字段控制,仅写两个要的
pdf.to_csv('files/pdf.csv',index=False,encoding='utf-8',columns=['Name','Age'])
#用pands的 readcsv ,读取csv数据
# header:指定标题行位置(默认 0,即第一行;None 表示无标题)。
# names:自定义列名列表。.
wd= pd.read_csv('files/pd.csv',names =['no','que','man'])
print('1----\n',wd)
wd1= pd.read_csv('files/pd.csv',header=0,names =['n','que','man'])
print('2----\n',wd1)
#usecols:选择特定列(按列名或索引)。
wd2= pd.read_csv('files/pd.csv',header=0,usecols =['问题','提出人'])
print('3----\n',wd2)
#nrows:读取前 N 行(用于快速预览)。
wd3= pd.read_csv('files/pd.csv',nrows=2)
print('3----\n',wd3)
"""
##使用读取配置,这个也就是字典,
import pandas as pd
# 读取配置
read_config = {
"filepath_or_buffer": "sales_data.csv",
"sep": ",",
"header": 0,
"usecols": ["OrderID", "OrderDate", "Amount"],
"parse_dates": ["OrderDate"],
"dtype": {"OrderID": "str", "Amount": "float32"},
"na_values": ["N/A", "Missing"],
"encoding": "utf-8",
"nrows": 1000 # 仅读取前 1000 行测试
}
df = pd.read_csv(**read_config)
print(df.info())
总结:
进行csv的写入 和读取的学习
1.基础的按csv模块的 读取和写入,感觉是没有pandas 的处理起来高效,
2.基于pandas库的 csv 操作更符合现在日常工作使用,大多是用在写入csv上面,关键的点也就是dataframe的组建,这就另外说了
单纯用pandas的写入csv 并没有很多要点
3.关于pandas库的csv 读取,涉及到了大量方便读取的参数配置,会有很多需要进一步学习的地方
"""
from operator import index
import pandas as pd
#读取excel中的数据
df= pd.read_excel("files/askdata.xlsx")
df1= pd.read_excel("files/askdata.xlsx",sheet_name='请款及时率',header=0,usecols=["channel","total_payment_count"])
#换个列头名字
df.columns=["days","day2","channel",'qty','qty_vi','ratio'] # 整体全部换名字的
df1=df1.rename(columns={
"channel":"qudao",
"total_payment_count":"count"
}) # 可按部分换名字
out_data1= df.head(10)
out_data2=df1.head(19)
with pd.ExcelWriter("files/output1.xlsx") as writer:
out_data1.to_excel(writer,index=False,sheet_name='out')
out_data2.to_excel(writer,index=False,sheet_name='out1')
#获取到excel中多个sheet页的内容,存储在dict里面,key是对应的sheet名称,value是一个数组,
all_sheets = pd.read_excel("files/output1.xlsx",sheet_name=None)
print_data= all_sheets['out']
print_data1= all_sheets['out1']
print(print_data)
print(print_data1)
print(type(all_sheets))