杂模块
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')