Python数据分析script必备知识(一)
1.重定向终端输出内容
使生成的结果移动到其他位置
# 重定向, 使生成的结果移动到其他位置
import sys
sys.stderr = sys.stdout
print(dir(sys)) # ,,,,,'__stderr__', '__stdin__', '__stdout__',,,,,,
# 使用场景:脚本上线时,想要把输出结果和错误记录保存成log,方便查看。
"""
stdout用于print()和状态表达式的结果输出,及input()的瞬时输出
"""
import sys
# 将当前默认输出路径保存为__str
__stout__ = sys.stdout
# 将后续print输出结果直接写入在对应的文件
sys.stdout = open('log_test.txt','a')
print('输出结果到log_test.txt文件里')
"""
stderr与stdout一样,用于重定向错误至某个文件
"""
# 将当前的错误输出结果错误为__stderr__
__stderr = sys.stderr
# 将后续的报错信息写入对应的文件中
sys.stderr = open('errorlog.txt','a')
import traceback
try:
10/0
except:
traceback.print_exc()
示图
2. 获取当前文件夹的方法
"""
获取当前文件夹的方法
"""
import os
# 获取当前文件所在位置的方法
print(os.path.abspath(__file__))
# 获取当前文件所在文件夹的方法
print(os.path.dirname(os.path.abspath(__file__)))
# 拼接路径,在当前文件所在文件夹位置下再加一个test文件夹
print(os.path.join(os.path.dirname(os.path.abspath(__file__)),'test'))
# 拼接路径,在当前文件所在文件夹位置下再加一个test.py文件
print(os.path.join(os.path.dirname(os.path.abspath(__file__)),'test.py'))
# 获取当前文件名
# 获取当前文件的文件名
print(os.path.basename(os.path.abspath(__file__)))
# 获取当前文件所在的文件夹的文件名
print(os.path.basename(os.path.dirname(os.path.abspath(__file__))))
# 创建递归文件夹 exist_ok =True 存在就不创建
# 在当前文件路径下创建和此脚本平行的文件夹B
os.makedirs('C',exist_ok=True)
# 获取当前文件路径和文件所在的文件夹名
folder_path,file_name = os.path.split(os.path.abspath(__file__))
# 当前文件夹路径
print(folder_path)
# 当前文件名
print(file_name)
示图
3.判断list为空的简便方法
"""
判断list为空的简便方法
"""
list1 = [1]
list2 = []
if list1:
print('list1有数据')
if list2:
pass
else:
print('list2没数据')
示图
4.如何用一套脚本执行两套逻辑
"""
如何用一套脚本执行两套逻辑
"""
# 如果isONE为True,执行逻辑一;如果isONE为False,执行逻辑二
isONE = True
try:
if isONE:
print('执行逻辑一')
else:
print('执行逻辑二')
except:
print('启动失败')
示例:
5.如何用pandas修改excel表里面某一列的值
"""
如何修改pandas某一列的值
"""
import pandas as pd
# 此次需要安装pandas和xlrd,openpyxk模块,尤其注意高版本的xlrd模块依旧支持读取.xls文件。
# 安装pandas包 pip install pandas # 用0.25.3版本演示
# 网上推荐1.2.0版本 pip install xlrd ==1.2.0 执行此命令安装不上时,可以尝试用conda环境
# openpyxl安装 pip install openpyxl
file_path = r'./demo5.xlsx'
table = pd.read_excel(file_path)
#
# # 方式一
table['测试3'] = '5'
print(table)
print(table['测试3'].dtype) # object
# 方法二
for i in range(len(table['测试4'])):
table['测试4'][i] = '6'
print(table['测试4'].dtype) # int64
# 或者
# for i in range(table.shape[0]):
# table['测试4'][i] = '6'
# 方法二适合里面有不同情况,加if时用
file_path = r'demo5.1.xlsx'
table.to_excel(file_path,index=False)
示图
6. DataFrame数组里面时间列有0的逻辑转换
"""
调整pandas里面是列的时间
"""
import os
import datetime
import pandas as pd
file_path = r'./demo6.xlsx'
a = pd.read_excel(file_path)
print(a) # 可以看到生产日期这一列有三种格式
print(a['生产日期'].dtype) # object
for i in range(len(a['生产日期'])):
# 如果为0,修改为19000101
if a['生产日期'][i]== 0:
a['生产日期'][i] = datetime.datetime.strptime('19000101','%Y%m%d')
# 如果是8位,转成时间格式
elif len(str(a['生产日期'][i])) == 8:
temp = datetime.datetime.strptime(str(a['生产日期'][i]),'%Y%m%d')
a['生产日期'][i] = pd.Timestamp(temp)
# 本来就是%y-%m-%d %h:%m:%s'的,不做处理
else:
pass
file_path = r'./demo6.1.xlsx'
if