栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Pandas学习+知识点梳理

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Pandas学习+知识点梳理

一、Pandas简介
  1. pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
  2. Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。
  3. pandas提供了大量能使我们快速便捷地处理数据的函数和方法。
  4. Pandas最初被作为金融数据分析工具而开发出来,因此,pandas为时间序列分析提供了很好的支持。
  5. Pandas 里面又定义了两种数据类型:Series 和 Dataframe。
二、常用功能

常用缩写:

  • df:任意的Pandas Dataframe对象

  • s:任意的Pandas Series对象
    同时我们需要做如下的引入:

    	
    import pandas as pd
    import numpy as np
    #导入数据
    pd.read_csv(filename) ##从CSV文件导入数据
    pd.read_table(filename) ##从限定分隔符的文本文件导入数据
    pd.read_excel(filename)#从Excel文件导入数据
    pd.read_sql(query, connection_object)#从SQL表/库导入数据
    pd.read_json(json_string)#从JSON格式的字符串导入数据
    pd.read_html(url)#解析URL、字符串或者HTML文件,抽取其中的tables表格
    pd.read_clipboard()#从你的粘贴板获取内容,并传给read_table()
    pd.Dataframe(dict)#从字典对象导入数据,Key是列名,Value是数据
    	
    #导出数据
    df.to_csv(filename)#导出数据到CSV文件
    df.to_excel(filename)#导出数据到Excel文件
    df.to_sql(table_name, connection_object)#导出数据到SQL表
    df.to_json(filename)#以Json格式导出数据到文本文件
    
    #创建测试对象
    pd.Dataframe(np.random.rand(20,5))#创建20行5列的随机数组成的Dataframe对象
    pd.Series(my_list)#从可迭代对象my_list创建一个Series对象
    df.index = pd.date_range('1900/1/30', periods=df.shape[0])#增加一个日期索引
    
    #查看、检查数据
    df.head(n)#查看Dataframe对象的前n行
    df.tail(n)#查看Dataframe对象的最后n行
    df.shape()#查看行数和列数
    df.info()#查看索引、数据类型和内存信息
    df.describe()#查看数值型列的汇总统计
    s.value_counts(dropna=False)#查看Series对象的唯一值和计数
    df.apply(pd.Series.value_counts)#查看Dataframe对象中每一列的唯一值和计数
    
    #数据选取
    df[col]#根据列名,并以Series的形式返回列
    df[[col1, col2]]#以Dataframe形式返回多列
    s.iloc[0]#按位置选取数据
    s.loc['index_one']#按索引选取数据
    df.iloc[0,#]#返回第一行
    df.iloc[0,0]#返回第一列的第一个元素
    
    #数据清理
    df.columns = ['a','b','c']#重命名列名
    pd.isnull()#检查Dataframe对象中的空值,并返回一个Boolean数组
    pd.notnull()#检查Dataframe对象中的非空值,并返回一个Boolean数组
    df.dropna()#删除所有包含空值的行
    df.dropna(axis=1)#删除所有包含空值的列
    df.dropna(axis=1,thresh=n)#删除所有小于n个非空值的行
    df.fillna(x)#用x替换Dataframe对象中所有的空值
    s.astype(float)#将Series中的数据类型更改为float类型
    s.replace(1,'one')#用‘one’代替所有等于1的值
    s.replace([1,3],['one','three'])#用'one'代替1,用'three'代替3
    df.rename(columns=lambda x# x + 1)#批量更改列名
    df.rename(columns={'old_name'# 'new_ name'})#选择性更改列名
    df.set_index('column_one')#更改索引列
    df.rename(index=lambda x# x + 1)#批量重命名索引
    
    #数据处理#Filter、Sort和GroupBy
    df[df[col] > 0.5]#选择col列的值大于0.5的行
    df.sort_values(col1)#按照列col1排序数据,默认升序排列
    df.sort_values(col2, ascending=False)#按照列col1降序排列数据
    df.sort_values([col1,col2], ascending=[True,False])#先按列col1升序排列,后按col2降序排列数据
    df.groupby(col)#返回一个按列col进行分组的Groupby对象
    df.groupby([col1,col2])#返回一个按多列进行分组的Groupby对象
    df.groupby(col1)[col2]#返回按列col1进行分组后,列col2的均值
    df.pivot_table(index=col1, values=[col2,col3], aggfunc=max)#创建一个按列col1进行分组,并计算col2和col3的最大值的数据透视表
    df.groupby(col1).agg(np.mean)#返回按列col1分组的所有列的均值
    data.apply(np.mean)#对Dataframe中的每一列应用函数np.mean
    data.apply(np.max,axis=1)#对Dataframe中的每一行应用函数np.max
    
    数据合并
    df1.append(df2)#将df2中的行添加到df1的尾部
    df.concat([df1, df2],axis=1)#将df2中的列添加到df1的尾部
    df1.join(df2,on=col1,how='inner')#对df1的列和df2的列执行SQL形式的join
    
    数据统计
    df.describe()#查看数据值列的汇总统计
    df.mean()#返回所有列的均值
    df.corr()#返回列与列之间的相关系数
    df.count()#返回每一列中的非空值的个数
    df.max()#返回每一列的最大值
    df.min()#返回每一列的最小值
    df.median()#返回每一列的中位数
    df.std()#返回每一列的标准差
    
三、实践

下面代码是实现车辆品牌车检的一段代码:
用到技术点:

  • 读取excel(read_excel)

  • 行筛选功能(=、>、<、in 、isnull)

  • 添加列(df.assign,计算出的)

  • 行操作

  • 单元格操作

    import pandas as pd    #引入pandas包并起别名
    import numpy as np     #引入numpy包并起别名
    #读取对应sheet页内容
    df = pd.read_excel(open(filename, 'rb'), sheetname=“sheet页名称”, encoding='utf-8')
    #如果变速箱类型是DSG则进行如下筛选
    if strDSG == "DSG":
        result = df[(df[u"厂保期"] == strGuanteeperiod) & (df[u"报价版本号"].isin(ruleversion)) & (df[u"车辆品牌"] == strbrandname) & (df[u"车系"] == r["车系"]) & (df[u"变速箱类型"] == strDSG)]  
    else:
        result = df[(df[u"厂保期"] == strGuanteeperiod) & (df[u"报价版本号"].isin(ruleversion)) & (df[u"车辆品牌"] == strbrandname) & (df[u"车系"] == r["车系"]) & (df[u"变速箱类型"].isnull())]  
    #是否查询到内容了,iscount>0则查到了
    iscount = len(result)
    # 增加辅助列,来完成对车型系类的比较
    df = result.assign(carseries_len=df[u"车型系类"].str.len())
     # 增加辅助列-车型系列是否存在车型里包含
    df = df.assign(iscarseries=map(lambda x: True if str(x) in r["车型"]  else False, df[u"车型系类"]))
     # 筛选
    df = df[df["iscarseries"] == True]
     # 按车型系列长度倒序
    result = df.sort_values("carseries_len", ascending=False)
    iscount = len(result)
    if iscount == 0:
        Errdesc = Errdesc + u"匹配不到保费值;"
    elif iscount >= 1:  # '可以查到保费值
        # '以第一个找到的保费值来匹配,查看保费结果是否正确
        premiumrule = result[strproductname].values[0]
        ghxsrule = result[u"公户系数"].values[0]
        xuhao = result[u"序号"].values[0]
        if not premiumrule or premiumrule == "" or premiumrule == 0:
        Errdesc = Errdesc + u"保费值为空;"
    else:
        if r["使用性质"] <> "家用":
            baofei = round(premiumrule * ghxsrule, 0)
        else:
            baofei = round(premiumrule, 0)
    
        if baofei == float(r["保费"]):
            Output = Output + u"保费值:" + str(premiumrule) + ";"
            Output = Output + u"公户系数:" + str(ghxsrule) + ";"
            Output = Output + u"使用保费页:" + Selectsheetname + ";"
            Output = Output + u"保费表中序号:" + str(xuhao) + ";"
            Ckresult = u"正确"
        else:
            Errdesc = Errdesc + u"保费值错误(规则表中公户系数:" + str(
            ghxsrule) + "," + strproductname + ":" + str(
            premiumrule) + "使用保费页:" + Selectsheetname + ";保费表中序号:" + str(xuhao) + ");"  
    
四、Pandas 知识点梳理


Pandas知识点梳理下载

OK,如果大家喜欢我的文章可以收藏支持!
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/280395.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号