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支持多种格式的导入(如下图)

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 pd

dataframe = pd.DataFrame([{'A':0},{'A':1}])
构造函数及参数如下所示:
pandas入门
pandas入门

4loc

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参数如下所示:

pandas入门

注:不同键值名键值关联如下:

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

彩蛋:https://www.lfd.uci.edu/~gohlke/pythonlibs/