美文网首页python
pandas 实现 Excel 常见操作 (2)

pandas 实现 Excel 常见操作 (2)

作者: Stone0823 | 来源:发表于2018-07-22 14:21 被阅读348次

    接下来介绍 pandas 的基本操作中,大体相当于 Excel 的合计、小计 (subtotal) 和数据透视表的方法。pandas 的数据统计功能比 Excel 强大很多,方式也更加灵活。Excel 问题之一就是数据的存储和显示不分离,而 pandas 和数据库处理方式类似,数据的存储和显示分离。

    计算合计数

    使用上一篇的 Excel 文件作为分析的数据源,假如需要对各个月份以及月份合计数进行求和。pandas 可以对 Series 运行 sum() 方法来计算合计:

    import pandas as pd
    import numpy as np
    
    df = pd.read_excel('http://pbpython.com/extras/excel-comp-data.xlsx');
    df['Total'] = df.Jan + df.Feb + df.Mar
    
    # sum_row 的类型是 pandas.core.series.Series, Jan, Feb 等成为 Series 的 index
    sum_row = df[['Jan', 'Feb', 'Mar', 'Total']].sum()
    

    也可以将 sum_row 转换成 DataFrame, 以列的方式查看。DataFrameT 方法实现行列互换。

    # 转置变成 DataFrame
    df_sum = pd.DataFrame(data=sum_row).T
    df_sum
    

    如果想要把合计数放在数据的下方,则要稍作加工。首先通过 reindex() 函数将 df_sum 变成与 df 具有相同的列,然后再通过 append() 方法,将合计行放在数据的后面:

    # 转置变成 DataFrame
    df_sum = pd.DataFrame(data=sum_row).T
    
    # 将 df_sum 添加到 df
    df_sum = df_sum.reindex(columns=df.columns)
    
    # append 创建一个新的 DataFrame
    df_with_total = df.append(df_sum, ignore_index=True)
    

    分类汇总

    Excel 的分类汇总功能,在数据功能区,但因为分类汇总需要对数据进行排序,并且分类汇总的数据与明细数据混在一起,个人很少用到,分类汇总一般使用数据透视表。

    而在 pandas 进行分类汇总,可以使用 DataFramegroupby() 函数,然后再对 groupby() 生成的 pandas.core.groupby.DataFrameGroupBy 对象进行求和:

    df_groupby = df[['state','Jan', 'Feb','Mar', 'Total']].groupby('state').sum()
    df_groupby.head()
    

    数据格式化

    pandas 默认的数据显示,没有使用千分位分隔符,在数据较大时,感觉不方便。如果需要对数据的显示格式化,可以自定义一个函数 number_format(),然后对 DataFrame 运行 applymap(number_format) 函数。applymap() 函数对 DataFrame 中每一个元素都运行 number_format 函数。number_format 函数接受的参数必须为标量值,返回的也是标量值。

    # 数字格式化
    def number_format(x):
        return "{:,.0f}".format(x) # 使用逗号分隔,没有小数位
    
    formated_df = df_groupby.applymap(number_format)
    formated_df.head()
    

    数据透视表

    pandas 运行数据透视表,使用 pivot_table() 方法。熟练使用 pivot_table() 需要一些练习。这里只是介绍最基本的功能:

    • index 参数: 按什么条件进行汇总
    • values 参数:对哪些数据进行计算
    • aggfunc 参数:aggregation function,执行什么运算
    # pivot table
    # pd.pivot_table 生成一个新的 DataFrame
    df_pivot = pd.pivot_table(df, index=['state'], values=['Jan','Feb','Mar','Total'], aggfunc= np.sum)
    

    相关文章

      网友评论

        本文标题:pandas 实现 Excel 常见操作 (2)

        本文链接:https://www.haomeiwen.com/subject/enflmftx.html