最近稍微研究了一下pandas如何做数据分析,本文主要记录下常用的用法:去重,分组计数,分组求和求平均,画直方图,画热力图.相关文档建议参考pandas的文档http://pandas.pydata.org/pandas-docs/stable/cookbook.html
题外话
首先说下用了pandas真的对java处理excel深恶痛绝...强类型转换经常需要我们进行复杂的变量类型判断,python这方面简单的多,比如时间,读成文本然后格式化,真的很方便
import pandas as pd
path = r'/app/web/pt'
os.chdir(path)
df = pd.read_excel(r'test.xls', na_values=['null'], dtype={'日期': str})
df['日期'] = pd.to_datetime(df['日期'])
df.to_excel(r'result.xls')
读写excel就是这么容易,分分钟打算放弃java
1.去重
df.drop_duplicates("a2") //以a2列为基准去重
df.drop_duplicates(["a2","a3"]) //
df.drop_duplicates("a2",keep='first') //去重 保留第一个
2.分组计数
df = df.groupby(['row1', 'row2']).size() //分组计数
df = df.groupby(['row1', 'row2']).mean() //分组求平均
3.画直方图
画直方图是画图里最简单的,把list放在plt的hist里面做参数即可
path = r'/app/web/pt'
os.chdir(path)
df = pd.read_excel(r'test.xlsx', na_values=['nan'])
new_seris = df.loc[(df['区域'] =='D'),'归类后']
values = []
values = new_seris.tolist()
plt.xlabel("归类")
plt.ylabel("频次")
plt.hist(values)
plt.title(u"A区问题分布直方图")
plt.show()
4.根据地址求经纬度
照搬百度api,不过自己得申请个vk码,对并发量和次数有限制.不过可以多帐号多线程去做
def check(address):
time.sleep(2)
try:
r = requests.get(
"http://api.map.baidu.com/place/v2/search?query=" + address + "®ion=北京&output=json&ak=nLpN5iKztxIWsPqgwsyrruUG")
except:
return 0, 0
s = json.loads(r.text)
print(r.text)
try:
lat = s["results"][0]["location"]["lat"]
lng = s["results"][0]["location"]["lng"]
return lat, lng
except:
return 0, 0
5 根据经纬度画热力图
同样的百度热力图由api,只要修改内部的经纬代码,换上自己的帐号即可,这里截图看下效果
结束语
以上是最近的一点小研究的总结,当作一个记录而已.谢谢阅读
个人博客 欢迎访问~
祝大家编码愉快,工作愉快,欢迎关注我的公众号,一起分享交流