xmanman

导航

 
当前时间
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('\n', ''))


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

 列转行: 原始数据格式:

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线 决算会\n(日本向) 产量 产量 7/8 NaN
184 CU1线 决算会\n(日本向) 产量 产量 7/9 NaN
207 CU1线 决算会\n(日本向) 产量 产量 7/10 NaN
230 CU1线 决算会\n(日本向) 产量 产量 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线 决算会\n(日本向) 产量 产量 7/8 NaN
184 CU1线 决算会\n(日本向) 产量 产量 7/9 NaN
207 CU1线 决算会\n(日本向) 产量 产量 7/10 NaN
230 CU1线 决算会\n(日本向) 产量 产量 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

  

 

posted on 2019-08-05 11:14  xmanman  阅读(243)  评论(0)    收藏  举报