继续接着上次的,总结这段时间在使用Python过程中遇到的问题与解决方法。
1. 正则表达式的使用(re)
import re
# 表达式编译
pattern = re.compile(r'^1[35789]\d{9}$')
# 如果存在匹配结果为True,否则为False
pattern.match(inst)
2. 在数据量特别大时,直接使用dataframe分片的效率优于使用groupby
#使用groupby
info_group = data.groupby('info')
for info,group in info_group:
print(info,group)
#使用dataframe分片
info_list = data['info'].dropna().values
for user_id in range(len(info_list)):
print(info_list[user_id])
group = data[(data['info'] == info_list[user_id])]
3. 画直方图(matplotlib.plyplot)
一个特别详细的例子
这里还有一个点画直方图时,赋给label的值如果是以下划线开头的,那么在图例中不显示,所以必须在变量前套上一个空格再赋给label
bar_width = 0.16 # 柱宽
i = -1
for id_name in id_list:
i += 1
temp = len(data[id_name])
# 画直方图
plt.bar(bar_width * i, temp, label=str(' ') + id_name,
alpha=0.8, width=bar_width)
# 数据标签
plt.text(bar_width * i, temp, '%s' % temp)
# 中文乱码的处理
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False
# 纵坐标标注
plt.ylabel('count')
# 横坐标标注
plt.xlabel('')
plt.title('标题')
# 横坐标刻度
plt.xticks(bar_width, '07-08')
# 纵坐标范围
plt.ylim([min - 700000, max + 200000])
# 不显示坐标轴刻度
plt.axis('off')
# 展示图例
plt.legend()
# 输出图例标签
print(plt.legend().get_texts()[:])
# 画图(必须有)
plt.show()
4. 求某一行(列)非null值个数(pandas)
import pandas as pd
data = pd.read_csv('test.csv', sep='\t')
# 计算某一行的非null值个数
data['row_not_null_count'] = data.count(axis=1)
# 计算某一列的非null值个数
data['col_not_null_count'] = data.count()
5. 不希望pandas输出警告信息
pd.options.mode.chained_assignment = None # default='warn'
6. url解码(urllib)
from urllib.parse import unquote
rawurl = "%3D%3D"
url =unquote(rawurl)
print(url)
7. 使用本地ip库求ip地址
import datx
ip_list = ['36.251.248.16']
# 查询地级市精度的IP库
c = datx.City("C:/Users/qinys/Downloads/17monipdb/17monipdb.datx")
# 查询国内区县库
#d = datx.District("/path/to/quxian.datx")
# 查询基站IP库
#base = datx.BaseStation("/path/to/station_ip.datx")
for ip1 in ip_list:
print(c.find(ip1))
# 输出格式如
# ['中国', '福建', '厦门', '']