pandas入门
Qt可以可以设计出艺术级别的界面,pandas可以帮助你成为数据分析大师。
一、数据导入
1、查询数据库数据(借助sqlalchemy实现)
import pandas as pd
from sqlalchemy import create_engine
url = "postgresql+psycopg2://%s:%[email protected]%s:%s/%s" % (user, passwd, ip, port, dbname)
dbengine = create_engine(url, echo=False)
sql_select = pd.read_sql(sqlstr, con=dbengine)
2、read_xxx
pandas支持多种格式的导入(如下图)
常用的有:read_csv、read_excel及上文提到的read_sql。
注:read_csv不只可以读取*.csv文件,也可以读取SringIO对象,如下所示。
memstream = StringIO.StringIO()
memstream.write('colname1,colname2\n')
memstream.seek(0)
dataframe = pd.read_csv(memstream)
3、构造函数(以字典为例)
import pandas as pddataframe = pd.DataFrame([{'A':0},{'A':1}])构造函数及参数如下所示:
4、loc
dataframe = pd.DataFrame(columns=["column01", "column02"])
for i in xrange(5):
dataframe.loc[relation.shape[0] + 1] = {"column01": stacode, "column02": citystas[stacode]}
二、数据计算
1、通过一列计算新一列
方式1:map
dataframe = pd.DataFrame([{'A':0},{'A':1}])
dataframe ['B'] = map(lambda avalue:'True' if avalue == 0 else 'False', dataframe ['A'])
方式2:apply
def funcdict(data):
valuedict = {0:'True', 1:'False'}
return valuedict[data]
dataframe ['B'] = dataframe.apply(lambda rowvalue:funcdict(rowvalue['A']), axis=1)
2、通过多列计算新一列
方式1:map
dataframe = pd.DataFrame([{'A':0,'B':2},{'A':1,'B':-1}])
dataframe ['C'] = map(lambda valuea, valueb:valuea+valueb, dataframe ['A'], dataframe ['B'])
方式2:apply
def funcdict(data1,data2):
return data1 + data2
dataframe ['C'] = dataframe.apply(lambda rowvalue:funcdict(rowvalue['A'],rowvalue['B']), axis=1)
三、数据分析
1、dataframe数据关联
dataframe1 = pd.DataFrame([{'A':'a','B':2},{'A':'a','B':1}, {'A':'b','B':2},{'A':'b','B':1])
dataframe2 = pd.DataFrame([{'A':'a','E':4},{'A':'a','E':2}, {'A':'b','E':3},{'A':'b','E':1}])
dataframe = pd.merge(dataframe1, dataframe2, how='left')
pd.merge参数如下所示:
注:不同键值名键值关联如下:
dataframe1 = pd.DataFrame([{'A':'a','B':2},{'A':'a','B':1}, {'A':'b','B':2},{'A':'b','B':1])
dataframe2 = pd.DataFrame([{'C':'a','E':4},{'C':'a','E':2}, {'C':'b','E':3},{'C':'b','E':1}])
dataframe = pd.merge(dataframe1, dataframe2, left_on='A', right_on='C', how='inner')
2、组合分析
dataframe = pd.DataFrame([{'A':'a','B':2,'C':1,'D':6,'E':4},{'A':'a','B':1,'C':3,'D':5,'E':2},
{'A':'b','B':2,'C':4,'D':6,'E':3},{'A':'b','B':1,'C':3,'D':2,'E':1}])
gpdataframe = dataframe.groupby(dataframe['A'], as_index=True)
funcdict = {'B':'sum','C':'max','D':'min','E':'mean'}
apidataframe = gpdataframe.agg(funcdict)
注:
1、如果需要保留A所对应的列,as_index设为False即可
2、groupby可以以多列作为键值进行组合分析:
gpdataframe = dataframe.groupby([dataframe['A'], dataframe['B']], as_index=True)
删除重复行
apidataframe.drop_duplicates