pandas基本操作

本文介绍了Pandas库在数据分析中的常用方法,包括查看数据头尾、信息概要、字段类型、索引和列名,以及如何进行数据分组、聚合操作。还涉及了数据清洗,如删除行,重命名列,以及使用Seaborn进行颜色配置。此外,文章提到了如何创建Excel色阶和条件格式,以及文件的保存和列宽设置。
摘要由CSDN通过智能技术生成
  1. df.head()/tail() 查看头/尾5条数据;
  2. df.info 查看表格简明概要;
  3. df.dtypes 查看字段数据类型;
  4. df.index 查看表格索引;
  5. df.columns 查看表格列名;
  6. df.values 以array形式返回指定数据的取值;
  7. list(dt.groupby("字段A")) groupby会把数据框按指定的字段分成几个小块,转化成列表,即可输出各部分的模块展示;
  8. groupby的聚合函数:
    函数名说明
    count分组中非NA值的数量
    sum非NA值的和
    mean非NA值的平均值
    median非NA值的算术中位数
    std、var无偏(分母为n-1)标准差和方差
    min、max非NA值的最小值和最大值
    prod非NA值的积
    first、last第一个或最后一个非NA值
  9. groupby的参数:
    
    by:mapping, function, str, or iterable。
    
    用于确定groupby的组。如果by是一个函数,那么会调用对象索引的每个值。如果传递了一个dict或Series,则将使用Series或dict的值来确定组。一个str或者一个strs列表可以通过自己的列传递给group。
    
    axis:轴,int值,默认为0
    
    level:如果axis是一个MultiIndex(分层),则按特定的级别分组。int值,默认为None
    
    as_index:对于聚合输出,返回带有组标签的对象作为索引。as_index=False实际上是“SQL风格”分组输出,boolean值,默认为True。
    
    sort:排序。关闭此功能以获得更好的性能。boolean值,默认True。
    
    group_keys:当调用apply时,添加group key来索引来识别片断。boolean值,默认True。
    
    squeeze:尽可能减少返回类型的维度,否则返回一致的类型。boolean值,默认False。
  10. dt.groupby(['版本','级别level','星期','时段'],as_index=False)['供应量'].count(),则可以显示excel数据透视表的功效
  11. dt.columns=['','','']统一赋值重命名,或者使用rename对指定列进行修改
    dt.rename(columns={'供需指数':'SDI均值'},inplace=True)
  12. 删除满足条件的行:drop删除一行的时候比较方便
    fx1.drop(fx1[fx1['版本']=='进阶版LTO试听课'].index,inplace=True)
    fx1=fx1.loc[(fx1['版本']!='进阶版LTO试听课'),:]
    &表示并集,|表示或集,~表示与列出的条件相反,:表示希望保留所有列
  13. 删除满足条件的行后,重置索引:drop删除原索引,inplace替换原文件
    fx1.reset_index(drop=True,inplace=True)
  14. 色阶配置:
    import seaborn as sns
    # cmp=sns.light_palette('pink',as_cmap=True)
    # cmp=sns.color_palette('Pastel1_r',as_cmap=True)
    # cmp=sns.color_palette('Pastel2',as_cmap=True)
    cmp=sns.color_palette('Spectral',as_cmap=True)
    therm=df.iloc[:,:].style.background_gradient(cmap=cmp)
    #默认是按列设置
    therm=df.iloc[:,:].style.background_gradient(cmap=cmp,axis=None)
    #axis可以全局设置格式

    为excel表格配置色阶,可以用iloc选择对哪些区域生效,用pd.ExcelWriter进行保存即可

  15. 条件格式常用:
  16. 实现case when操作:
    import interval
    import pandas as pd
    
    
    def data_divide(x):
        if x in interval.Interval(0, 1, upper_closed=False):
            return "0)0"
        elif x in interval.Interval(1, 10, upper_closed=False):
            return "1)1-9"
        elif x in interval.Interval(10, 50, upper_closed=False):
            return "2)10-49"
        elif x in interval.Interval(50, 100, upper_closed=False):
            return "3)50-99"
        else:
            return "4)100+"
    
    
    df=pd.read_excel(dfpath,dtype={'老师id':object})
    print(df.columns)
    df['qian3']=df['前3个月试听学生数'].apply(data_divide)
    jihe=df.groupby('qian3')['老师id'].count()

    注:Interval函数是数据区间的意思,0≤x≤10 就可以用Interval(0,10)

     upper_close是一个参数,默认是左闭右闭, upper_close=False就是右开

  17. 简单的左连接及列值替换
    data=pd.merge(data1,data2,how='left',on='教师id')
    # print(data[data['是否绑定企微']>0].count())
    data.loc[data['是否绑定企微']>0,'是否绑定企微']='是'
    #匹配上的标记为是,即已绑定企微
    data['是否绑定企微'].fillna('未绑定',inplace=True)
    #未匹配上的空值,填充为未绑定显示
  18. 列值替换np.where:语法: df[“column_name”] = np.where(df[“column_name”]==”some_value”, value_if_true, value_if_false) 
     示例: 这个numpy.where()函数应该写上条件,如果条件为真,后面是值,如果条件为假,则是一个值。现在,我们要把性别栏中的所有 “数字 “改为是, 空值改为未绑定。
     

  19. 掩码替换使用pandas掩码函数
    Pandas的掩蔽函数是为了用一个条件替换任何行或列的值。
    语法: df[‘column_name’].mask( df[‘column_name’] == ‘some_value’, value , inplace=True )
     

  20. 掩码替换字符串

    替换包含指定字符的字符串

    语法 : data["列名"].mask(data.列名.str.contains(".*?某字符串"), "替换目标字符串", inplace=True) 

  21. 文件名加入日期:
    from datetime import date
    riqi=date.today().strftime('%Y-%m-%d')
    
    writer=pd.ExcelWriter(downpath+'教师企微绑定明细'+riqi+'.xlsx')
    data.to_excel(writer,sheet_name='明细',index=False)
    piv.to_excel(writer,sheet_name='完成度')
    pivw.to_excel(writer,sheet_name='未绑定汇总')
    writer.save()
    reset_col(writer)
  22. 列宽设置

    def reset_col(filename):
        wb=load_workbook(filename)
        for sheet in wb.sheetnames:
            ws=wb[sheet]
            df=pd.read_excel(filename,sheet).fillna('-')
            df.loc[len(df)]=list(df.columns)   #把标题行附件到最后一行
            for col in df.columns:
                index=list(df.columns).index(col)   #列序号
                letter=get_column_letter(index+1)   #列字母
                collen=df[col].apply(lambda  x:len(str(x).encode())).max()    #获取这一列长度的最大值 当然也可以用min获取最小值 mean获取平均值
                ws.column_dimensions[letter].width=collen*1.2+4               #也就是列宽为最大长度*1.2  可以自己调整
            wb.save(filename)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值