zoukankan      html  css  js  c++  java
  • 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=','))
  • 相关阅读:
    Android开发之Sqlite的使用
    ZOJ 3607 Lazier Salesgirl
    ZOJ 3769 Diablo III
    ZOJ 2856 Happy Life
    Ural 1119 Metro
    Ural 1146 Maximum Sum
    HDU 1003 Max Sum
    HDU 1160 FatMouse's Speed
    Ural 1073 Square Country
    Ural 1260 Nudnik Photographer
  • 原文地址:https://www.cnblogs.com/wangbin2188/p/6544213.html
Copyright © 2011-2022 走看看