zoukankan      html  css  js  c++  java
  • python随便记记

    当前时间
    import datetime
    print(datetime.now())
    系统退出
    import sys
    sys.exit()
    -------------------------------------------------------------------------------------------------------------
    对于dataframe,一行或者一列都是一个series,而series拥有map方法,所以可以通过写map函数来操作一列或者一行
    举例:
    创建一个dataframe :
    a = pd.DataFrame({'A':['nihao',2,3], 'B':[4,5,6], 'C':[7,8,9]})
    对A列进行repalce替换操作,注意替换要先转换成str方法
    a.A.map(lambda x:str(x).replace('ni','hen'))
    a.A.astype(np.str).map(lambda x:x.replace('ni','hen')) #更优解
    转换过后赋给A,再重新赋给dataframe a
    a=a.assign(A=a.A.map(lambda x:str(x).replace('ni','hen')))

    等同于:
    data[['部门', '科别']] = data[['部门', '科别']].applymap(lambda x: x.replace('
    ', ''))


    -------------------------------------------------------------------------------------------------------------

     列转行: 原始数据格式:

    Index(['线体', '项目', '属性', '明细', '7/1', '7/2', '7/3', '7/4', '7/5', '7/6', '7/7','7/8', '7/9', '7/10', '7/11', '7/12', '7/13', '7/14', '7/15', '7/16','7/17', '7/18', '7/19', '7/20', '7/21', '7/22', '7/23', '7/24', '7/25','7/26', '7/27', '7/28', '7/29', '7/30'] 

    #pd.melt列转行,将日期转成列
    meltDF = pd.melt(data, id_vars=['线体', '项目', '属性', '明细'],value_vars=value_vars, var_name='日期',value_name='指标值')
         线体 项目 属性 明细 日期 指标值
    161 CU1线 决算会 (日本向) 产量 产量 7/8 NaN
    184 CU1线 决算会 (日本向) 产量 产量 7/9 NaN
    207 CU1线 决算会 (日本向) 产量 产量 7/10 NaN
    230 CU1线 决算会 (日本向) 产量 产量 7/11 NaN

    #pd.pivot_table 列转行
    mdd = pd.DataFrame(pd.pivot_table(meltDF, index = ['线体', '项目', '属性','日期'],columns = '明细', values = '指标值'))


    -------------------------------------------------
    # 针对指标值,进行空值替换,维度除外
    value_vars = ['线体', '项目', '属性', '明细']
    data[value_vars] = data[value_vars].fillna(0)

     -----------------------------------------------------------------------------------

    判断是否有空值,且个数 :meltDF.指标值.isnull().sum()  结果为:4

    打印:meltDF[meltDF.指标值.isnull()]
    线体 项目 属性 明细 日期 指标值
    161 CU1线 决算会 (日本向) 产量 产量 7/8 NaN
    184 CU1线 决算会 (日本向) 产量 产量 7/9 NaN
    207 CU1线 决算会 (日本向) 产量 产量 7/10 NaN
    230 CU1线 决算会 (日本向) 产量 产量 7/11 NaN

     ---------------------------------------------------------------------------------------------

    #axis=1 代表对x轴操作,axis = 0 代表对y轴操作,limit参数表示填充多少个
    data = data.fillna(method='pad',axis=1).fillna(method="pad",axis=0,limit=1)
    等同于:data = data.ffill(axis=1).ffill(axis=0)

    -------------------------------------
    # 删除指定列 : data.drop([ '合计'],axis=1,inplace=True)
    # 删除最后一行: data = data.drop(index=len(data)-1, axis=0)
    ---------------------------------------------------

    # 重置索引
    data.reset_index(drop=True,inplace=True)
    ----------------------------------------------------

    # 修改单元格的值,.at[索引值]
      data['统计月份'].at[3] = '201907'


    ----------------------------------------------------


    #修改列名
    data.rename(columns={data.columns[2]:'属性', data.columns[3]:'明细'}, inplace = True)
    ---------------------------------------------------------------------------------
    #字段重新排序
    sortCol = ['统计年度', '统计月份', '部门', '总出勤时间', '实绩工数', '综合能率']
    data = data.loc[:, sortCol]

    ---------------------------------------------------------------
    针对某些列进行替换操作
    可参考:https://blog.csdn.net/weixin_37674494/article/details/82632621?utm_source=blogxgwz8
    方法一 批量:data[value_vars] = data[value_vars].fillna(0)

    方法二 循环一列一列的
    for columns in value_vars:
    data[columns] = data[columns].fillna(0)
    -----------------------------------------------

        删除没用的行,删除项目为差/变化点的行

    data = data[~data.项目.isin(['差','变化点'])]
    #删除所有列都是空的行
    data.dropna(how='all',inplace=True)
    ---------------------------------------------------------
    Python中*args
    def fun_var_args(farg, *args):  
        print "arg:", farg  
        for value in args:  
            print "another arg:", value  
      
    fun_var_args(1, "two", 3) # *args可以当作可容纳多个变量组成的list

    调用:
    fun_var_args(1, "two", 3) # *args可以当作可容纳多个变量组成的list
    1. arg: 1  
    2. another arg: two  
    3. another arg: 
    
    
    Python中**kwargs的用法
    def fun_var_kwargs(farg, **kwargs):  
        print "arg:", farg  
        for key in kwargs:  
            print "another keyword arg: %s: %s" % (key, kwargs[key])  
      
      
    fun_var_kwargs(farg=1, myarg2="two", myarg3=3) # myarg2和myarg3被视为key, 感觉**kwargs可以当作容纳多个key和value的dictionary  
    1. arg: 1  
    2. another keyword arg: myarg2: two  
    3. another keyword arg: myarg3: 3

      

     python包的维护:
    1.1 升级pip
    python -m pip install --upgrade pip
    
    1.2 安装包
    pip install 安装包名
    
    1.3 pip查看是否已安装
    pip show --files 安装包名
    
    1.4 检查包的版本
    pip show pandas
    
    1.5检查哪些包需要升级
    pip list --outdated
     
    使用sql来操作dataframe
    from pandasql import sqldf
    
    #等同于下:pysqldf = lambda q: sqldf(q, globals())  def pysqldf(sql): return sqldf(sql, globals()) data2 = pysqldf("select * from data where 科别 like '%组%';")

      

    让python忽略警告

    import warnings
    warnings.filterwarnings("ignore")
    

      

     
    日志打印,选择日志的输出方式,

    from logging import getLogger, StreamHandler, INFO, DEBUG, Formatter
    import sys
    LOG_LEVEL = INFO
        logger = getLogger(__name__)
        handler1 = StreamHandler(sys.stdout) # 默认是stderr
        handler1.setLevel(LOG_LEVEL)
        handler1.setFormatter(Formatter("%(asctime)s %(levelname)8s %(message)s"))
        logger.setLevel(LOG_LEVEL)
        logger.addHandler(handler1)
        logger.propagate = False
    

      

    欢迎对it热情的同学,加qq进行技术讨论; QQ:850922253
  • 相关阅读:
    g_pLog
    win-socket
    时间转字符串 各种格式
    linux自启动脚本.sh
    openssl之aes对称加密
    openssl生成密钥/证书
    win10下安装openssl
    GUI的最终选择 Tkinter(二):Label和Button组件
    GUI的最终选择 Tkinter(一):Tkinter最初体验
    练习十三:水仙花数,用for循环实现
  • 原文地址:https://www.cnblogs.com/zhangwensi/p/11301857.html
Copyright © 2011-2022 走看看