当前时间
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
- arg: 1
- another arg: two
- another arg: 3
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
- arg: 1
- another keyword arg: myarg2: two
- 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