Python数据处理-联接

数据分析

使用Python进行数据分析,在数据预处理方面,python要比R语言有优势。
通过熟悉Python基本的数据处理,以便工作中更好的发挥两者的功效。
首先大体浏览命令,建立起轮廓,然后通过具体的案例,熟悉命令
结构化的数据处理和非结构化的数据处理
--非结构化数据 转换为结构化的数据

数据示例

数据示例:studentid','interval','countNum
201 1   1
201 5   1
140 1   7
140 1   2
140 2   1

pandas数据结构

Series  数据和索引 data-index
DataFrame   表格型数据结构 
嵌套字典

程序代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#! /usr/bin/python
# -*- coding:utf-8 -*-

import pandas as pd

def main():
    inpputfile = 'C:\\Users\\yt\\Desktop\\Program\\Date1030-1112.txt'
    try:
        #读取txt文件
        interaldata  = pd.read_table(inpputfile, header=None,names=['studentid','interval','countNum'],sep='\t')
        #排序
        #interaldata.sort_values(by='studentid', ascending=True)
        #interaldata.sort_index(axis=1, ascending=True)
        #数据转换和去重
        uniqdata = interaldata['studentid'].to_frame().drop_duplicates() 
        #分组,确定分组的组数
        grouped = interaldata.groupby(interaldata['interval'])
        mergerK = len(grouped['interval'].count())
        #联结-组数上+1<从0开始>
        #联结的重复列名处理 -- suffixes-追加到重叠列名末尾
        #middata = pd.merge( middata  , interaldata[ interaldata['interval']==2], on='studentid' ,how='left',suffixes=('_left','-right'))
        middata = pd.merge( uniqdata  , interaldata[ interaldata['interval']==1], on='studentid' ,how='left')
        for ange in range(2,(mergerK+1)):
            middata = pd.merge(middata,interaldata[ interaldata['interval']==ange], on='studentid' ,how='left')
        # 将NAN替换为0
        outdata =   middata.fillna(0)
        #列数
        KK = outdata.shape[1]  #outdata.shape[0]行数
        colodd= range(1,KK,2)
        #特定位置添加列表元素
        colodd.insert(0,0)
        colevent = range(0,KK,2)
        tmpdata = outdata.ix[:,colodd]
        #数据类型转换 
            resultdata = outdata.ix[:,colevent]
        resultdata.ix[:,range(1,resultdata.shape[1])] = resultdata.ix[:,range(1,resultdata.shape[1])] .astype('int')
        #保存数据-去掉列名
        resultdata.to_csv("C:\\Users\\yt\\Desktop\\Program\\submission.csv", index=False,header=False)
    except  IOError:
        print("错误文件")
    else:
        print('Processing')
    finally:
        try:
            print "again
        except  NameError:
        print "again"

if __name__ == "__main__":  
    main()
##本程序中异常处理功能报错,这部分先放这,待需要时在修正
01.#两个对象的列名不同,可以分别指定,例:pd.merge(df1,df2,left_on='lkey',right_on='rkey')
    #middata.rename(columns={'interval_x':'a', 'interval_y':'c'}, inplace = True)
02.
interaldata[0:2]            #选取多个行
interaldata.ix[[0,2,4,5,7],[1,2]] #ix 的功能就更强大了,它允许我们混合使用下标和名称进行选取
interaldata.irow(0)     #取data的第一行
interaldata. iloc(0)        #取data的第一列 
interaldata.iat[1,1]        #选取第二行第二列,用于已知行、列位置的选取
# iloc 使得我们可以对column使用slice(切片)的方法对数据进行选取

帮助信息

 help(resultdata.to_csv)        帮助我们了解该对象的更多信息
 dir(resultdata)                帮助我们获取该对象的大部分相关属性。

pandas输入和输出

文件类型和格式     文本文件 二进制文件 数据库 网页
=文件类型和格式 - 函数-输入参数-输出格式
    01.函数
        pandas.read_table()
        pandas.read_csv()
        ……
    02.参数
        索引
                index_col
        标题  header
             列名 names
        跳过文件行
            skiprows
            skip_footer
        分割符 sep
        缺失值默认处理:na_values
        读取大文件--只读几行nrows
            chunksize --逐快读取文件-设置行数 chunksize=1000
            iterator
        编码
            encoding
    03.输出格式

存储
    -- Dataframe   Series
    pandas.to_csv()
        pandas.save()

Pandas 数据操作

    并集-outer        交集-inner
    pandas.concat(,axis=0) 行
    pandas.concat(,axis=1) 列        
        outdata.shape[0] #行数
        outdata.shape[1] #列数
    reindex

比较

01.函数
    函数          调用  比如  len()  type    函数式代码组织和复用的方式,
    函数的作用空间,函数亦对象
对象方法    调用
对象属性

02.传递方式 
    01.Python
        001.可变对象
        对变量赋值时,是按照引用传递,即创建等号右侧对象的一个引用,赋值==绑定 binding
        按照 引用传递 -- 即Python函数可以修改其参数的内容
        002.不可变对象

    02.R语言
   按照值传递 -- 创建副本
    03.C语言
    按 值传递 的意思就是,传入的数据仅仅是数据的值
                表现:按值传递方法原本的数据不会有变化
    按 引用传递<地址传递> 的意思就是,直接把数据的地址传进去
                表现:按引用传递的话,可以修改原数据

03. 大部分是严格求值
    迭代器和生成器等是懒惰求值 Lazy Evaluation
    匿名函数 lambda
    闭包 closure   currying 柯里化

blogroll

social