Python~Pandas 小白避坑之常用笔记

Python~Pandas 小白避坑之常用笔记


提示:该文章仅适合小白同学,如有错误的地方欢迎大佬在评论处赐教

文章目录

  • Python~Pandas 小白避坑之常用笔记
  • 前言
  • 一、pandas安装
  • 二、数据读取
  • 1.读取xlsx文件
  • 2.读取csv文件
  • 三、重复值、缺失值、异常值处理、按行、按列剔除
  • 1.重复值统计、剔除:
  • 2.缺失值统计、剔除:
  • 3.遍历pandas对象进行异常值剔除、修改
  • 4.按行、按列剔除
  • 四、数据提取、loc、iloc的使用
  • 1.根据列名提取数据
  • 2.loc数据提取
  • 3.iloc数据提取
  • 4.loc常用示例
  • 五、常用的操作函数
  • 六、数据运算函数
  • 1.常用的运算函数
  • 2.分组运算 ~ groupby
  • 3.聚合运算 ~ groupby、agg
  • 4.pandas – map()
  • 七、数据文件输出
  • 1.xlsx写入
  • 2.csv写入
  • 总结

  • 前言

    1、Pandas是python的一个数据分析包,为解决数据分析任务而创建的;
    2、Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具;
    3、pandas提供了大量能使我们快速便捷地处理数据的函数和方法;它是使Python成为强大而高效的数据分析环境的重要因素之一;

    示例数据(csv,xlsx)地址自行提取-提取码:3uqa:https://pan.baidu.com/s/1Tz-NiSgpCyzOOW5LvPKHEA?pwd=3uqa


    提示:以下是本篇文章正文内容,下面案例可供参考

    一、pandas安装

    镜像地址
    清华:https://pypi.tuna.tsinghua.edu.cn/simple
    阿里云:http://mirrors.aliyun.com/pypi/simple/
    中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
    华中理工大学:http://pypi.hustunique.com/
    山东理工大学:http://pypi.sdutlinux.org/
    豆瓣:http://pypi.douban.com/simple/

    安装最新版本:pip install pandas -i https://pypi.tuna.tsinghua.edu.cn/simple

    我的pandas版本:1.1.3;

    指定版本安装:pip install pandas==1.1.3 -i https://pypi.tuna.tsinghua.edu.cn/simple

    二、数据读取

    1.读取xlsx文件

    read_excel() 参数介绍:
    io:文件地址
    sheet_name:工资表中的子表名,默认为:sheet1
    index_col: 指定行索引, 默认None, 可以是数字/list
    usecols:usecols=[‘user’,“pwd”] 指定user,pwd列进行读取、默认(usecols=None)全部读取
    skiprows:根据数字索引跳过行数据,默认从第0行开始

    import pandas as pd
    
    sheet1 = pd.read_excel(io='非洲通讯产品销售数据.xlsx', sheet_name='SalesData', skiprows=0, usecols=None)
    print(sheet1.head(5))  # 控制台打印前5条数据
    

    2.读取csv文件

    read_csv()参数介绍:
    filepath_or_buffer:文件地址
    sep:以什么分隔,sep=“\t"以tab键分隔,默认以英文逗号(”,")分隔
    index_col: 指定行索引, 默认None, 可以是数字/list
    usecols:usecols=[‘user’,“pwd”] 指定user,pwd列进行读取、默认(usecols=None)全部读取
    skiprows:根据数字索引跳过行数据,默认从第0行开始

    import pandas as pd
    
    sheet1 = pd.read_csv(filepath_or_buffer='非洲通讯产品销售数据.csv', sep=',', skiprows=0, usecols=None)
    print(sheet1.head(5))  # 控制台打印前5条数据
    

    三、重复值、缺失值、异常值处理、按行、按列剔除

    1.重复值统计、剔除:

    import pandas as pd
    
    sheet1 = pd.read_csv(filepath_or_buffer='long-customer-train.csv', sep=',', skiprows=0, usecols=None) 
    duplicated_num = sheet1.duplicated(subset=['user_id']).sum()  # 统计user_id列 重复值的数量
    print("user_id重复列数:", duplicated_num)
    sheet1.drop_duplicates('user_id', inplace=True)
    duplicated_num = sheet1.duplicated(subset=['user_id']).sum()  # 再次统计user_id列 重复值的数量
    print("剔除后-user_id重复列数:", duplicated_num)
    

    2.缺失值统计、剔除:

    dropna()参数介绍:
    axis:0(对行数据进行剔除)、1(对列数据进行剔除),默认为0
    how:any(行中有任意一个空值则剔除), all(行中全部为空值则剔除)
    inplace:是否在该对象进行修改

    import pandas as pd
    
    sheet1 = pd.read_csv(filepath_or_buffer='long-customer-train.csv', sep=',', skiprows=0, usecols=None) 
    all_null = sheet1.isnull().sum(axis=0).sum()   # 统计所有的缺失值行数
    print("缺失值行数:", all_null)
    sheet1.dropna(axis=0, how='any', inplace=True)  # 剔除每行任一个为空值的数据
    all_null = sheet1.isnull().sum(axis=0).sum()   # 统计所有的缺失值行数
    print("剔除后的缺失值行数:", all_null)
    

    3.遍历pandas对象进行异常值剔除、修改

    需求:“Age”列存在数值为-1、0 和“-”的异常值,删除存在该情况的行数据;“Age”列存在空格和“岁”等异常字符,删除这些异常字符但须保留年龄数值

    import pandas as pd
    
    sheet1 = pd.read_csv(filepath_or_buffer='long-customer-train.csv', sep=',', skiprows=0, usecols=None) 
    print("异常值处理前:")
    print(sheet1['Age'].head(5))
    
    for index, row in sheet1.iterrows():
        if '-' in row['Age'] or len(row['Age'].strip()) < 1:  # 异常值特征定义
            sheet1.drop(index=index, inplace=True)  # 根据索引就行剔除
        elif '岁' in row['Age']:
            row['Age'] = row['Age'].replace('岁', '').strip()  # 需要修改的字段定义
            sheet1.loc[index] = row  # 根据索引对该行数据进行修改
        elif float(row['Age']) <= 0:
            sheet1.drop(index=index, inplace=True)
    print("异常值处理后:")
    print(sheet1['Age'].head(5))
    

    4.按行、按列剔除

    import pandas as pd
    
    sheet1 = pd.read_csv(filepath_or_buffer='long-customer-train.csv', sep=',', skiprows=0, usecols=None)
    print(sheet1.head(5))
    sheet1.drop(index=0, inplace=True)  # 根据索引,行剔除
    sheet1.drop(labels=['城市', '地区'], axis=1, inplace=True)  # 按列 删除(城市, 地区)列
    print(sheet1.head(5))
    

    四、数据提取、loc、iloc的使用

    1.根据列名提取数据

    import pandas as pd
    
    sheet1 = pd.read_excel(io='非洲通讯产品销售数据.xlsx', sheet_name='SalesData', skiprows=0, usecols=None)
    area_list = sheet1['地区'].values.tolist()  # 提取地区列,转为list
    sheet1_data_list = sheet1.values.tolist()
    print("地区列:", area_list[:5])  # 一维列表
    print("全部列:", sheet1_data_list[:5])  # 二维列表
    

    2.loc数据提取

    import pandas as pd
    
    sheet1 = pd.read_excel(io='非洲通讯产品销售数据.xlsx', sheet_name='SalesData', skiprows=0, usecols=None)
    sheet1 = sheet1.loc[0:4, ['日期', '国家']]  # 提取前5行, 日期、国家列
    

    3.iloc数据提取

    import pandas as pd
    
    sheet1 = pd.read_excel(io='非洲通讯产品销售数据.xlsx', sheet_name='SalesData', skiprows=0, usecols=None)
    sheet1 = sheet1.iloc[0:4, 1:3]  # 提取前5行, 1、2、3 列
    

    4.loc常用示例

    import pandas as pd
    
    sheet1 = pd.read_excel(io='非洲通讯产品销售数据.xlsx', sheet_name='SalesData', skiprows=0, usecols=None)
    print(sheet1.head(5))
    # 根据条件 指定"利润"字段赋值, 条件符号:或(|),与(&)
    sheet1.loc[(sheet1['销售额'] <= 600) & (sheet1['利润'] <= 20), '利润'] = 8888  
    print(sheet1.head(5))
    

    五、常用的操作函数

    import pandas as pd
    
    sheet1 = pd.read_excel(io='非洲通讯产品销售数据.xlsx', sheet_name='SalesData', skiprows=0, usecols=None)
    # print(sheet1.head(5))  # 打印前5条数据
    # print(sheet1.tail(5))  # 打印最后5条数据
    # print(sheet1.shape)  # 打印行数和列数
    # print(sheet1.columns.tolist())  # 提取列名转为list
    # sheet1['国家'] = sheet1['国家'].astype(str)  # 修改字段类型
    # sheet1.columns = ['test1', 'test2', 'test3', 'test4', 'test5', 'test6', 'test7']  # 设置列名
    # sheet1.rename(columns={'国家': '国家-test'}, inplace=True)  # 修改列名
    # sheet1.fillna(value=0, inplace=True)  # 填充空值, value=填充的值
    # sheet1['年度'] = sheet1['日期'].dt.year  # 根据日期字段 新增年份列
    # sheet1['季度'] = sheet1['日期'].dt.quarter  # 根据日期字段 新增季度列
    # sheet1.reset_index()  # 重置索引
    # sheet1.concat(obj1, obj2)  # 将两个DataFrame对象进行合并
    

    六、数据运算函数

    1.常用的运算函数

    import pandas as pd
    
    sheet1 = pd.read_excel(io='非洲通讯产品销售数据.xlsx', sheet_name='SalesData', skiprows=0, usecols=None)
    # print(sheet1['利润'].sum())  # 该列求和
    # print(sheet1['利润'].max())  # 该列最大值
    # print(sheet1['利润'].min())  # 该列最小值
    # print(sheet1['利润'].mean())  # 该列平均值
    # print(sheet1['利润'].mean(axis=1))  # 每行 平均值
    # print(sheet1['利润'].median())  # 该列中位数
    

    2.分组运算 ~ groupby

    import pandas as pd
    
    sheet1 = pd.read_excel(io='非洲通讯产品销售数据.xlsx', sheet_name='SalesData', skiprows=0, usecols=None)
    sheet1['年度'] = sheet1['日期'].dt.year  # 根据日期字段 新增年份列
    sheet1['季度'] = sheet1['日期'].dt.quarter  # 根据日期字段 新增季度列
    # 按年度分组,指定销售额列进行求和计算
    compute_result = sheet1.groupby("年度")['销售额'].sum()  
    print(compute_result)
    

    3.聚合运算 ~ groupby、agg

    import pandas as pd
    
    sheet1 = pd.read_excel(io='非洲通讯产品销售数据.xlsx', sheet_name='SalesData', skiprows=0, usecols=None)
    sheet1['年度'] = sheet1['日期'].dt.year  # 根据日期字段 新增年份列
    sheet1['季度'] = sheet1['日期'].dt.quarter  # 根据日期字段 新增季度列
    # 针对字段:年度、国家进行分组,求和计算字段:销售额、利润
    compute_result = sheet1.groupby(['年度', '地区']).agg({"销售额": 'sum', "利润": "sum"})
    print(compute_result)
    # agg 聚合, 可用列表和字典作为参数, 常用函数:mean/sum/median/min/max/last/first
    # 分组后对某列进行多个函数计算
    # compute_result = sheet1.groupby(['年度', '地区']).agg({"销售额": ['sum', 'min'], "利润": [np.mean, max]})  
    

    4.pandas – map()

    def data_parse(rows):
        return '1111'
    
    # map() 将该列的元素迭代传入data_parse()函数作为参数,可以在函数内对该数据进行处理,return一个新值
    sheet1['国家'] = sheet1['国家'].map(data_parse)
    print(sheet1.head(5))
    

    七、数据文件输出

    1.xlsx写入

    import pandas as pd
    
    sheet1 = pd.read_excel(io='非洲通讯产品销售数据.xlsx', sheet_name='SalesData', skiprows=0, usecols=None)
    sheet1 = sheet1.loc[0:4, ['日期', '国家']]  # # 提取前5行, 日期、国家列
    sheet1.to_excel(excel_writer='test.xlsx')
    

    2.csv写入

    import pandas as pd
    
    sheet1 = pd.read_excel(io='非洲通讯产品销售数据.xlsx', sheet_name='SalesData', skiprows=0, usecols=None)
    sheet1 = sheet1.loc[0:4, ['日期', '国家']]  # # 提取前5行, 日期、国家列
    sheet1.to_csv(path_or_buf='test.csv')
    


    总结

    以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法,续有常用的pandas函数会在这篇博客中持续更新。

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python~Pandas 小白避坑之常用笔记

    发表评论