python输出字体的大小_Python之美——一只数据狗的笔记[长期更新]

187fbe8651dd30b25d8d3ea82ee429c5.png

两年前咬咬牙跳了Matlab的坑,入手了Python,从此一发不可收的成了PY的重度依赖者。本人研究工作皆涉及大量的数据处理工作,PY和R作为数据分析的两驾马车,得其一者得天下。另外,我接触的许多软件皆比较小众,每次在涉及二次开发时,很多都是Matlab之流不支持的,而PY又往往是官方指定接口。因此,PY作为程序界的黏合剂,实在是方便至极。

如今机器学习和深度学习之热,再次炒热了PY。当然,涉及到统计模型,R的功力还是更深的。很多前沿或者有一定深度的统计模型,在R中都能快速实现,但在PY中则没有现成的package。因此,现在不得不承认,PY和R,各有千秋,要都熟稔才行。

写此文,是为记录一些灵感,供广大PY爱好者,也供自己,学习与查阅。

List形式的for in if else

爬到一组房价数据,但经纬度皆以'121.43247'的string形式存储于DataFrame的一列中,且对于空缺值,以int形式的0或者float行驶的0.00填充。也就是说,该列存在多种数据格式,必须写条件判断才能循环。现需要将其进行修正提取,将'121.43247'提取为121.43247,而对于空值,统一以int形式的0填充。

于是,最低级的写法出现了:

for jj in range(0, len(all_fangjia)):
	if all_fangjia.loc[jj, 'len'] > 3:
		all_fangjia.loc[jj, 'new_lat'] = all_fangjia.loc[jj, 'lat'].split(''')[1]
		all_fangjia.loc[jj, 'new_lon'] = all_fangjia.loc[jj, 'lon'].split(''')[1]

该法思路清晰,但速度奇慢。对该列数据进行遍历,先判断该数据长度,如果大于3,说明是string形式的,然后再按照'''进行拆分(需要用来转义),选取第二个值进行提取。

思路是对的,但速度实在太慢了。于是,就要请出循环的list风格化了:

all_fangjia['new_lon'] = [var.split(''')[1] if len(var) > 3 else 0 for var in all_fangjia['lon']]
all_fangjia['new_lat'] = [var.split(''')[1] if len(var) > 3 else 0 for var in all_fangjia['lat']]

将代码压缩至了两行,速度更是提升了几十上百倍(具体提升量级没算,但反正速度是飞快的了)。此法非常关键,掌握了对之后的数据处理效率大有提升。

佛系空格分隔符的处理

在拿到某些奇葩的原始数据文件时,其不同列间的分隔不是传统的',',而是奇葩的不规整的空格符,也就是说,某两列用了三个空格符来分隔,某两列则用了四个,甚至在一列中,某两行用了2个空格分隔,某两行则用了3个。。

对于这种佛系空格分隔符,一种处理方法就是用正则(re)表达式,而另一种非常简单的方法,则是:

import pandas as pd
tem=pd.read_csv('583211-2017.out', delim_whitespace=True, engine='python')

即在熊猫包里面的read_csv中,设置delim_whitespace=True即可。

字符串数据转化为数字编号

比如有N个样本,且存在一列专门对其类别进行标记,但标记用的全是字符串,如“大”、“中”、“小”。为了之后处理方便,需要将其变成0、1、2这种数字形式。这时就需要请出category类型来操作了。相关操作皆针对DataFrame格式实现。

obj_df["body_style"] = obj_df[“body_style"].astype('category')
obj_df["body_style_cat"] = obj_df["body_style"].cat.codes
绘图时批量改变所有字体大小

在利用matplotlib绘图时,题目、坐标轴标签、坐标轴名称等等的字体大小都需要分别设置,非常麻烦,而下面的方法则可以批量一次性设置,修改起来也就随之方便了。

应注意,如果有多个ax,则还需要再嵌套一层循环,先指向某一个ax.

import matplotlib.pyplot as plt
fig,ax=plt.subplots()
for item in ([ax.title, ax.xaxis.label, ax.yaxis.label] +
                 ax.get_xticklabels() + ax.get_yticklabels()):
    item.set_fontsize(20)
批量快速导入Oracle

做数据工作的,拿Python去接数据库是非常常见的事情,而Oracle又是数据库里面的老大哥。在此不介绍如何安装接口包cx_Oracle,只介绍如何快速将大量数据一次性导入到Oracle中。

在没Get到此技能之前,我都是一条条的往里面插入数据的,数据量小还好,一旦大起来,速度就奇慢无比了。

于是,便有了下面的思路:先打包,再导入:

#导入连接包
import cx_Oracle as oracle
db = oracle.connect('scott/redhat@192.168.223.138:1521/oracle.test')
#对待导入的数据进行处理
DFV = DFV.fillna('None')
DFV = DFV.values.tolist()
rows = []
for jj in range(len(DFV)):
    # 转list
    row = (DFV[jj][0], DFV[jj][1], DFV[jj][2], DFV[jj][3], DFV[jj][4], DFV[jj][5], DFV[jj][6])
    rows.append(row)
# 写入数据
cr = db.cursor()
cr.prepare(
    'insert into OTJ_WATERLINK_WK2 (linkid,fromnode,LONGITUDE,LATITUDE,GRIDID,ROADNAME,SECT) values (:1, :2, :3, :4, :5, :6, :7)')
cr.executemany(None, rows)
db.commit()
cr.close()

试过的都知道,速度杠杠的。再也不用担心大

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值