杂模块

1、pandas.to_csv乱码问题

data_xlsx.to_csv(out_dir+newname+'.csv',encoding='utf-8')
乱码,改为
data_xlsx.to_csv(out_dir+newname+'.csv',encoding='utf_8_sig')

utf-8-sig 是带有 BOM(Byte Order Mark)头的 UTF-8 编码格式。BOM 是一个特殊的字符序列,用于标识文本数据的字节序。在使用某些应用程序处理 UTF-8 文本时,需要使用带 BOM 头的 UTF-8 编码格式,否则可能会出现乱码或者其他错误。

2、dataframe中取两列转化为字典

allocation_dict = df.set_index('column1')['column2'].to_dict()

3、pandas读取有sheet的文件

excel_file = pd.ExcelFile(r'G:\data.xlsx')
sheet_names = excel_file.sheet_names
df1 = excel_file.parse('sheet1')
df2 = excel_file.parse('sheet2')
excel_file.close()

4、pyexcel实现excel转csv

import pyexcel as pe
pe.save_as(file_name='202302.xlsx', dest_file_name='202302.csv')

效率比pandas直接打开然后保存要慢,小数据集可以用

5、计算程序运行时间差

import time
start = time.perf_counter()
...
end = time.perf_counter()
print('Running time: %s Seconds'%round((end-start),2))

6、直接将dataframe导入到mysql中

# dtypedict为创建表时的字段类型,若存在该表,则直接导入数据,建议还是先自己create一个表
    dtypedict = {
        'month':INT,
        'datetime':DATE,
        'account': VARCHAR(length=40),
        'show': INT,
        'click':INT,
        'spend':FLOAT,
        'purchase_num':INT,
        'purchase_cost':FLOAT,
        'transform_rate':FLOAT
    }
    engine = create_engine("mysql+pymysql://root:password@127.0.0.1:3306/database?charset=utf8")
    with engine.begin() as conn:  # 事务出错回退
        df.to_sql(name='baidudata', con=conn, if_exists='append', index=False, dtype=dtypedict)

7、夏令时调整
夏令时调整(Daylight Saving Time adjustment),又称为夏时制或日光节约时间,是指在某些国家或地区将时钟调快一小时,以便更好地利用夏季充足的日照时间。

由于夏令时调整可能导致某些时间重复出现,因此需要使用折叠属性来正确处理这些时间,折叠属性就用于标记同一时区中的这些重复时间。

from datetime import datetime
import pytz

tz = pytz.timezone("America/New_York")
dt = datetime(2022, 4, 1, 12, 30, tzinfo=tz)
dt_with_fold = dt.replace(fold=1)  # 设置折叠属性

# 使用 normalize 方法,而非 localize 方法
dt_normalized = tz.normalize(dt_with_fold)

print(dt_normalized)

使用apscheduler时候:

# scheduler = BlockingScheduler() 能运行但是有警告
scheduler = BlockingScheduler(timezone="Asia/Shanghai")

8、matplotlib解决中文跟负号无法显示问题

import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
# 当matplotlib不想要窗口,而是想要将图像直接保存到文件或以其他方式进行处理。这时可以使用 AGG 渲染器,它只需要一个支持 PNG 和 SVG 文件格式的画布即可生成静态图片
matplotlib.use('Agg')

apscheduler定时任务

官方API文档

最后编辑:2023年03月31日 ©著作权归作者所有