美文网首页
pandas和Series使用

pandas和Series使用

作者: 萌木盖 | 来源:发表于2018-12-25 00:11 被阅读0次

    Series

    由数组和列表创建Series是一个浅拷贝(只拷贝引用地址,不拷贝对象本身)对象数值变化,数组也变

    • from pandas import Series
      • 引入Series
    • Series([1,2,3,4,5],index=list("abcde"))
      • 创建和索引
    • Series({"a":1,"b":2,"c":3})
      • 由字典创建
    • s.values
      • 显示值
    • s.index
      • 显示索引
    • s[]
      • 按字典索引
    • s.ix
      • 显示隐式都可
    • s.loc
      • 显示索引
    • s.iloc
      • 隐式索引
    • s.size
      • 大小
    • s.shape
      • 形状
    • pd.read_csv("./titanic.txt")
      • 读取csv文件
    • 变量名.head(3)
      • 前几条
    • 变量名.tail(10)
      • 最后几条
    • pd.isnull()
      • 判断是否为空
    • pd.notnull()
      • 判断是否为空

    DataFrame

    dic = {
        "姓名":["狗蛋","刘德华","鹿晗","TF","张柏芝","谢霆锋"],
        "语文":[120,130,140,110,110,100],
        "数学":[130,110,100,100,100,120],
        "外语":[120,130,123,125,112,143],
        "综合":[230,240,254,234,100,100] 
    }
    df = DataFrame(dic,index=list("abcdef")) 
    

    创建DataFrame

    • df.columns
      • 横索引
    • df.index
      • 纵索引
    • df2.add(df1,fill_value=0)
      • fill_value参数在补用它的值去填补缺失的地方
      • (注意)原来既缺行又缺列的仍然补nan
    • df.cumsum()
    • ue.groupby(["contb_receipt_dt","party"])[["contb_receipt_amt"]].sum().unstack(level=1).cumsum().cumsum()
      • 分完组之后累计求和
    Python Operator Pandas Method(s)
    + add()
    - sub(), subtract()
    * mul(), multiply()
    / truediv(), div(), divide()
    // floordiv()
    % mod()
    ** pow()

    Series与DataFrame之间的运算

    - 使用Python操作符:以行为单位操作(参数必须是行),对所有行都有效。(类似于numpy中二维数组与一维数组的运算,但可能出现NaN)
    - 使用pandas操作函数:
        - axis=0:以列为单位操作(参数必须是列),对所有列都有效。
        - axis=1:以行为单位操作(参数必须是行),对所有行都有效。
    
    • df2.add(s_row,axis=1)

      • df2中的与s_row同样的一行里面数值进行相加。
    • np.nan(NaN)

    • np.nan(NaN)

      • np.nan是浮点类型,能参与到计算中。但计算的结果总是NaN。
      • 但可以使用np.nan*()函数来计算nan,此时视nan为0。
      • pandas中None与np.nan都视作np.nan
    • np.nansum(nd)

      • 视nan为0之后求和。
    • pandas中None与np.nan的操作

    • df.isnull()

      • 判断是否为空,按照dataframe形式显示
    • df.notnull()

      • 与上述相反
    • df.isnull().all(axis=0)

      • 判断每一列中的所有元素是否全为True,如果是则为True
    • df.isnull().any(axis=0)

      • 判断每一列中是否有为True的元素,如果有一个为True,则为True
    • df.dropna(axis=1,how="any")

      • axis 0 默认,代表操作行 1 代表操作列
      • how "any"默认只要有缺失就丢弃 "all"所有的都缺失才丢掉
    • df.fillna(1000)

      • 直接填补为nan的
    • df.fillna(method="bfill",axis=0)

      • 拿后面的行标对应的值填充到前面的nan位置
    • df.fillna(method="ffill",axis=0)

      • 拿前面的行标对应的值填充到前面的nan位置
    • 隐式构造

    • s = Series(data=[100,98,89,90],
      index=[["张三","张三","李四","李四"],["期中","期末","期中","期末"],
      ["a","b","a","b"]])
      s

      • Series也可以创建多层索引
    • df = DataFrame(data=[100,98,89,90],
      index=[["张三","张三","李四","李四"],["期中","期末","期中","期末"],
      ["a","b","a","b"]],
      columns = ["python"]
      )
      df

      • DataFrame隐式构造
    • 显示构造pd.MultiIndex

    • mindex =pd.MultiIndex.from_arrays([["a",'a','a','b','b','b'],
      ['一单元',"二单元","三单元",'一单元',"二单元","三单元"]])
      mindex

      • 使用数组
    • mindex = pd.MultiIndex.from_tuples([("河南","郑州"),
      ("河南","洛阳"),
      ("山东","济南"),
      ("河北","石家庄"),
      ("北京","天安门"),
      ("四川","成都"),
      ("江苏","南京")])

      • 注意:每个元组代表一个行(或列)的索引名,索引名要用元组的元素来体现
        mindex
      • 使用tuple
    • mindex = pd.MultiIndex.from_product([["河南","山东"],['郑州','济南']])
      mindex

      • 使用product

    索引的堆

    • df1.stack(level=1)
      • 使用stack()的时候,level等于哪一个,哪一个就消失,出现在行里。
    • df.unstack(level=2)
      • 使用unstack()的时候,level等于哪一个,哪一个就消失,出现在列里。

    过滤

    • df.where(df>50,other=0)
      • 这个函数是根据条件来过滤,并将不符合的改成0

    级联

    • pd.concat([df1,df2])
      • 和np.concatenate一样,优先增加行数(默认axis=0)
    • pd.concat([df1,df2],axis=1)
      • 增加列数
      • 注意index在级联时可以重复
      • 也可以选择忽略ignore_index,重新索引
      • 不匹配指的是级联的维度的索引不一致。例如纵向级联时列索引不一致,横向级联时行索引不一致(通俗的讲就是级联完了索引是1231234这种,并不是启用统一的级联)
    • pd.concat([df1,df2],keys=["教学","品保"])
      • 使用多层索引 keys
    • pd.concat([df1,df3],axis=0,join="outer")
      • 外连接
      • 1、不匹配级联在外连接的模式下要求如果axis=0行级联列索引必须保持一致
      • axis=1列级联行索引必须保持一致
      • 2、如果不一致缺哪个索引就补全哪个索引
    • pd.concat([df1,df3],axis=0,join="inner")
      • 内连接:只连接匹配的项
      • 内连接在级联的时候不一致的地方全部丢弃
    • pd.concat([df1,df4,df5],axis=1,join_axes=[df1.index])
      • 连接指定轴

    合并

    • df1.merge(df3)
      • 使用pd.merge()合并时,会自动根据两者相同column名称的那一列,作为key来进行合并。
    • df1.merge(df5,on="name",suffixes=["实际","假的"])
      • 如果两个表有多个相同的属性,需要指定以哪一个属性为基准来合并
    • df1.merge(df6,left_on="name",right_on="姓名")
      • 如果两个表没有相同的属性,可以左边的表出一个属性,右边的表出一个属性,然后进行合并
      • 这种合并两个属性不能并在一起
    • df1.merge(df6,right_index=True,left_index=True)
      • 用索引来合并
    • df1.merge(df7,how="inner")
      • 内合并:只保留两者都有的key(默认模式)
    • df1.merge(df7,how="outer")
      • 外合并 how='outer':补NaN
    • df1.merge(df7,how="right")
    • df1.merge(df7,how="left")
      • 左和并:以左侧为基准,左侧有右侧没有补nan,左侧没有右侧有去掉
      • 有合并:和上面相反

    删除重复元素

    • df.duplicated()
      • 返回值为一个Series记录着每一行的重复情况,如果某一行不是第一次出现就认为他是重复
      • 返回是否重复的bool值
    • df.drop_duplicates(inplace=True)
      • 删除重复数据

    映射

    • df.replace({"red":"blue","green":20},inplace=True)
      • 把字典的键替换成值
    • df["h5"].map(lambda x : x-40)
      • 按照函数来替换
    • df.rename(columns={"外语":"English"},index=func)
      • 替换索引

    异常值检测和过滤

    • df.describe()
      • 显示个数,平均数,标准差,最大值等信息

    排序

    • np.random.permutation()
      • 函数随机排序(随机打乱)
    • df.take([1,0,1])
      • 按索引提取,一般与上个函数一起用
    • ue.sort_values(by=["contb_receipt_dt"])
      • 按照值排序
    • data.sort_index(axis=1,ascending=False)
      • 按照索引降序排列

    数据聚合

    • price_mean = df.groupby(["item"])[["price"]].mean()
      • 分组后,按照组进行求和,平均等操作
    • price_mean.round(2)
      • round让结果在输出的保留几位小数
    • df.groupby(["color"]).transform(sum)
      • 高级数据聚合(显示样式有区别)
    • df.groupby(["color"]).apply(sum)
      • 高级数据聚合(显示样式有区别)
    • 转换日期类型

    • pd.to_datetime(ue["contb_receipt_dt"])
      • 从字符串类型转到日期类型

    相关文章

      网友评论

          本文标题:pandas和Series使用

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