• python之数据分析pandas


    做数据分析的同学大部分入门都是从excel开始的,excel也是微软office系列评价最高的一种工具。

    但当数据量超过百万行的时候,excel就无能无力了,python第三方包pandas极大的扩展excel的功能,入门需要花费一点时间,但是真的是做大数据的必备神器!

    1.从文件读数据

    pandas支持多种格式数据的读取,当然最常见的是excel文件、csv文件和TXT文件。

    names指定列名,delimiter指定列之间的分隔符

    文件名前最好加‘r’,代表不转义。

    import numpy as np
    import pandas as pd
    #读取TXT文件 df
    =pd.read_table('C:Userswangbin10Desktopjhinfo.txt',names=['dvid','cid','dt','atimes'],delimiter=' ') #读取excel文件 df=pd.read_excel(r'E:log oken0722.xlsx','Sheet1') #读取csv文件 df=pd.read_csv(r'E:logchannel_addchannel_add11.txt',names=['cha','dvid','dt','act','isna'],delimiter='01')

    2.向文件写数据

    当我们通过各种透视、钻取、转换得到我们需要的数据,就可以保存到文件中。

    groupd=df.groupby('cid')['atimes']
    #保存到csv文件,保留index
    groupd.mean().to_csv('E:logchannel_addgroup10.csv',index=True)
    #输出到excel文件
    df3=pd.to_excel(r'E:log	oken0722v1.xlsx')
    #保存到csv文件,不保留index
    df.to_csv('E:loglost.txt',index=False)
    def save_excel(dst_file, sheet_data_list, sheet_name_list):
        writer = pd.ExcelWriter(dst_file, engine='xlsxwriter')
        for sheet_data, sheet_name in zip(sheet_data_list, sheet_name_list):
            sheet_data.to_excel(writer, sheet_name=sheet_name, index=False, encoding='utf8')
        writer.save()
        writer.close()

    3.数据的筛选

    往往我们并不需要文件中的所有数据,只是需要其中的一部分,pandas提供了很多方式把它切出来

    #逻辑筛选
    df2=df[df['cid'].isin(['c147','c148'])]
    df2=df[df['atimes']>1]
    df2=df[df['is_new']=='T']
    #选取index=A 的数据
    df['A']
    #选择前三行
    df[0:3]
    #按位置对行列进行选择
    df.iloc[3:5,1:2]
    df.iloc[[1,2,5],[0,2]
    df.iat[1,1]
    #按标签筛选
    df.loc['20160101':'20160131',['dt','atimes']]
    # 复杂筛选
    data.loc[(data["Gender"]=="Female") & (data["Education"]=="Not Graduate") & (data["Loan_Status"]=="Y"), ["Gender","Education","Loan_Status"]]

    4.数据排序

    # 按行序号或列序号进行排序
    df.sort_index(axis=1,ascending=false)
    # 按值排序
    df.sort(columns='dt')
    data_sorted = data.sort_values(['ApplicantIncome','CoapplicantIncome'], ascending=False) 

    5.数据转换

    # 强制类型转换
    data[row['feature']]=data[row['feature']].astype(np.float)
    #赋值
    df.at[dates[0],'A'] = 0
    df.iat[0,1] = 0
    # 对列去重
    df.drop_duplicates()
    # 删掉任意有缺省值的行
    df1.dropna(how='any')
    # 填充缺失值
    df1.fillna(value=5)
    # 将一行增加到df
    df.append()
    # 转换数据结构,将数据改变成记录式
    stacked = df2.stack()
    # 将记录数据改成行列式
    stacked.unstack()
    # 赋值
    df.ix[1:3,['B','C']] = 1.0
    f=lambda x:x[:7]
    # 新增一列月份
    df['month']=df['dt'].apply(f)
    # 新增一列客户端
    df['platform']=np.where(df['dvid'].str.len()>=32,'IOS','Android')
    # 删掉某一行,按照index,默认是在行上删除,删除列需要指定轴
    df.drop(index)
    df.drop('dvid',axis=1)
    # 利用where进行生成新字段
    os=np.where(df['dt'].str.startswith('2016-05'),'2016-05','2016-06')
    # 截取不需要的字符串
    df['act2']=df['act1'].str.rstrip('_ios')
    #利用numpy进行数据转换
    df['news']=np.where(df['_c1'].str.find('"news"')==-1,'F','T')
    # 字符串分割转换为列表,并使用函数生成新列
    df2['act']=df2['act'].str.split(',')
    df2['actimes']=df2['act'].apply(date_change)
    # 替换hive特殊符号
    df['act']=df['act'].str.replace('02',',')

    6.数据概览

    df.head()
    df.tail()
    df.index
    df.columns
    df.values
    df.describe()

    7.数据连接合并

    # 求两个数据的交集
    df=pd.merge(df1,df2,on ='dvid')
    # 按列合并数据集
    pd.merge()
    df4=pd.merge(df2,df3,left_on=['dvid'],right_on=['divice_id'],how='left')
    # 按行链接各部分组成新的dataframe
    dfs1=pd.concat([df1,df2,df3,df4,df5])

    8.数据聚合

    对列atimes按照cid进行聚合,求均值
    groupd=df.groupby('cid')['atimes']
    groupd.mean()
    # 按月份和cid进行分组,计算均值
    groupd=df['atimes'].groupby([df['month'],df['cid']])
    # groupby 的其他方式,.count(),sum(),prod(),mean(),min(),max(),std(),var(),first(),last(),describe()也可以自定义函数
    # 若要观察多个指标,可使用agg传入
    groupd.agg(['sum','count','mean'])
    # 也可以通过元组方式对不同字段进行不同方式聚合
    groupd.agg([('dvid','sum'),('atimes','count')])
    # 若对多个列进行多种方式聚合,可以使用下列方式
    functions=['sum','count','mean']
    groupd['dt','cid'].agg(functions)
    # 调用value_counts函数可以方便对任意列进行计数统计,默认按照降序排列
    tz_counts=df['cid'].value_counts()

    9.数据透视表

    数据透视表是excel的重要功能,pandas也提供了透视表功能。

    # 数据透视表
    pv_table=pd.pivot_table(df,index=['cid'],columns=['month'],values=['atimes'],aggfunc=[np.mean])
    # 交叉表
    cross_table=pd.crosstab(df['cid'],df['month'])

    10.单列数据的运算

    单列数据可以进行简单的sum(),count(),mean(),max(),min()等运算。

    df['num'].sum()
    df['num'].count()
    df['num'].mean()
    df['num'].max()
    df['num'].min()

     11.apply

    def table_name_merge(data_frame, db2, table2):
        db_name = data_frame[db2]
        table_name = data_frame[table2]
        ...
    
    df['table_name_2'] = df.apply(table_name_merge,axis=1, args=('db', 'table'))

     12.row_num

    df26['row_num'] = df26['交易金额2'].groupby(df26['供应商id']).rank(ascending='desc', method='first')

    13.collect_set

    data2 = df.groupby('url', as_index=False)['type'].agg(lambda x: x.str.cat(sep=','))
  • 相关阅读:
    [asp.net] 网页自动刷新总结
    内容页中修改母版页内容
    [asp.net] 页面传值方法小记
    [VSS2005] 源代码管理bin文件夹里的.dll总是被签出,不能同时编译解决办法
    [asp.net] 设置与获取CheckBoxList多选的值
    [转] asp.net中repeater按钮传值与分页
    [asp.net] 验证控件的属性及用法
    [asp.net] 格式化repeater字段显示
    VPS绑定中文域名方法
    M/T法测速经典解析(转)
  • 原文地址:https://www.cnblogs.com/wangbin2188/p/6544213.html
Copyright © 2020-2023  润新知