zoukankan      html  css  js  c++  java
  • Pandas

    Pandas

    0 重要概念

    pandas 核心对象就是Dataframe和Series,前者简称df,就是excel那样的数据,二维的。Series就是excel的一列,df由多个Series构成。
    

    1.文件读取

    df=pd.read_csv(file_path,sep=',',header,names,index_col,usecols,)
    常用参数:file_path 就是路径
        	sep 默认为,
            header 头 类似于excel的第一行
            names 当header=None,可以设置头,['a','b','c']
            index_col 有时候文件自带行索引,不需pandas提供
            usecols  需要用到的那些列,['a','c']
            skiprows 跳过哪一行,舍弃掉
    # 其他文件格式大差不差
    

    我们也可以使用 to_csv() 方法将 DataFrame 存储为 csv 文件

    1.1 查看df的一般信息

    df.head(n) # n为int 表示读前几行 
    df.tail(n) # 表示读后几行
    df.info() # 查看数据的属性 有没有缺失值
    

    2.Series

    2.0 Series简介

    Series 就是可以理解为dataframe的一列,他的索引是可以设置的,可以理解为key:value
    

    2.1 Series 创建

    pd.Series(data:数据,index:"索引",dtype:"类型",name:"名称")
    s1 = pd.Series(data=[i for i in range(10)], index=[f'{i}a' for i in range(10)])
    print(s1['1a'])  # 为 1 可以根据索引直接取出来
    
    data 也可以是字典
    data = {f'{i}a':i for i in range(10)} # 和上面是样的
    

    2.2 Series 属性

    series.index  # 系列的索引
    series.values # 系列的值
    series.name    # 头标签,类似于excel的第一行
    series.hasnan   # 是否有nan值
    

    2.3 Series 数据访问

    s1 = Pd.Series(data={f'{i}a':i for i in range(10)})
    s1[0],s1[[1,2,3]],s1[1:3], # 内置索引
    s1[['1a','2a']]  # 我们自己设置的索引
    

    2.4 Series 部分函数使用

    series.astype(dtype)  #    将series类型转成dtype   dataframe  df.astype({"col":dtype})
    series.convert_dtypes() #  自动转成便于计算的类型
    series.apply(func)  # 每一行应用方法
    series.map({k:v})  # 把k映射成v,没有映射到的为NAN
    series.agg(['min','max'])
    series.groupby()
    # ser.groupby(["a", "b", "a", "b"]).mean()
    # ser.groupby(level=0).mean()
    # ser.groupby(ser > 100).mean()
    series.describe() # 描述信息
    

    3 . Dataframe

    3.1 Dataframe创建

    1. 列表创建
    	 pd.Dataframe([['Google',10],['Runoob',12],['Wiki',13]])
    2. 字典创建1
    	 data = {'Site':['Google', 'Runoob', 'Wiki'], 'Age':[10, 12, 13]}
         pd.Dataframe(data = data)
    3. 字典创建2
    	data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]
        pd.Dataframe(data = data)
    

    3.2 Dataframe 属性

    df.index
    df.columns
    df.values # [ [一行行数据],[一行行数据] ]
    df.memory_usage() # 内存使用信息
    df.ndim  # 几个维度的
    

    3.3 Dataframe 转换

    1. df.astype
    	df.astype('int32')
    	df.astype({'col1': 'int32'}).dtypes
    2. convert_dtypes   # 将python 对象转成 便于运算的
    3. df.infer_objects()
    

    3.4 行列操作curd等

    3.4.1 列操作

    1. 列的获取
    	df['列名']
        df[['col1','col2']]  # 取出想要的列  df[df.columns[0:2]] 这种也行
    2. 列的添加
    	df['新列'] = pd.Series([xxxx,xxxxx])
    3. 插入
    	df.insert(2,'列名',allow_duplicates=False) # 第三个参数表示可不可以列名重复
    4. 删除
    	del(df['列名'])
        df.pop('列名')
        df.drop(['列名'],axis=1) # 当axis=1 删除列  当为0 时表示删除一行
    

    3.4.2 行操作

    1 . 取出
    	df.loc[['b','d']]
        df.iloc[0:2]
        df.loc['a':'b',"a":"e"]  # 自定义索引切
        df.iloc[1:3,2:5]   # 自带int索引获取
    2.  添加
    	df.append(df,ignore_index)  #
    3. 删除
    	df.drop(index)
    4. 定位
    	df['列']['索引']  # 视图  可以修改
        df['列'].iat[index]
    

    3.5 Dataframe 一些方法

    1. df.where(df>100,other=100) #大于100的保持原样,其他的为100
    2. df.mask(df>100,1000) # 大于100 的标记为1000
    3. df.query('a<b')  # 返回dataframe对象  和这个一样  df[df.a < df.b]
    4. df.apply(func,axis) axis=0 表示一列下都是的,axis=1表示 每一行
    5. df.applymap(func) 给每一个元素,进行函数处理
    6. df.groupby(['列']).agg({'age':[np.min,np.max]})
    7. df.sort_values(by, axis=0, ascending=True:"升序还是降序",inplace = False:"是否就地")
    ex:
        df2 = pd.DataFrame({"a":['v1a','a3e',"o2q",'o4w'],'b':[ i for i in range(4)]})
     df2.sort_values(by='a',key = lambda x:df2['a'].apply(lambda x:int(x[1])))
    
    8. df.set_index('col')  #把列作为索引
    

    3.6 数据透视表

    3.6.0 透视表简介

    和excel的透视表一样,将一堆数据,按照某一列分组,计算出其他列的均值、总和、最大值等类似的值
    

    3.6.1 pivot_table的使用

    pivot_table(values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All', observed=False, sort=True)
    values # 要计算那种数据
    index # 指的是一行一行的索引,
    columns # 指的是每一个列的索引
    margins # 表示是否有边缘 汇总,
    

    3.7 数据清洗

    数据一般会存在重复值,异常值,缺失值
    重复值:数据重复,可能是一行数据都一样当作为重复,也可能事某一列重复就当作重复。
    缺失值:值没有,一般要填充,填充的值有多样,众数、平均等
    异常值:有一些值比较怪,不符合标准。比如某个值大于三倍标准差的测定值
    

    3.7.1 重复值

    df.duplicated(subset=['列'],keep='last')  # subset 默认每一行都一样才算重复,keep表示重复的值保留哪一个,最后一个还是第一个
    df.drop_duplicated(subset=['列'],keep='last')  # 去除重复值,subset表示哪列一样就算重复
    

    3.7.2 缺失值

    1. 丢弃 df.dropna( axis = 0 , how = 'any' , thresh = None , subset = None , inplace = False )
    	thresf: 表示要有几个缺失才删除
        axis: 表示轴
        subset: 表示依据那几个列判断,
        inplace:表示是否修改原来的df
    2. 替换 df.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None)
    	method:表示替换的方法
        limit:表示最多替换多少
        value:表示把nan替换成什么
    3. 插值法
    	通过计算构建模型计算出这个值
    

    3.7.3 异常值

    异常值一般要通过分析,根据业务场景标准不一样,有常见几种方法,
    1. 简单统计量分析 
    2. 3σ原则,数据 - 平均值 > 3*标准差 
    3. 箱线图分析方法
    

    3.8 Dataframe 合并

    3.8.1 df.append()

    df.append(other, ignore_index=False, verify_integrity=False, sort=False)
    other: 添加其他的df,数据一样
    

    3.8.2 df.compare()

    df.compare(other, align_axis=1, keep_shape=False, keep_equal=False)
    # 展示两个df的不同,
    

    3.8.3 df.join()

    df.join(other, on=None, how='left', lsuffix='', rsuffix='', sort=False)
    
    other:表示和谁合并
    on:以那个为准合并
    lsuffix:当df的列一样左边的df的列加一个后缀
    

    3.8.4 df.merge()

    df.merge(right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), copy=True, indicator=False, validate=None)
    
    永远不要高估自己
  • 相关阅读:
    杂记
    实战:PSP上运行Windows 95
    [英语阅读笔记] CodeSnip: Uploading Multiple Files At Once
    整理网上的一些关于sharepoint编码方面的最佳实践 Virus
    ASP.NET、SharePoint中另存文件的长文件名被截断的原因及解决办法 Virus
    一个由Erlang引发的故事,关于语言和工资的故事 Virus
    ASP.NET统计图表控件 Virus
    关于验证码的思考 Virus
    Design Pattern 设计模式【观察者】 Virus
    moss开发实施过程中遇到的问题总结:项目层面 Virus
  • 原文地址:https://www.cnblogs.com/liqiangwei/p/15071063.html
Copyright © 2011-2022 走看看