Filtering DataFrames:
1.Filtering with a Boolean Series;(df.数量>60)
2.Combining filters(&,|)
Select columns with all nonzeros:
df.loc[:,df.all()]
Select columns with any nonzeros:
df2.loc[:,df2.any()]
select columns with any NaNs:
df.loc[:,df.isnull().any()]
select columns without NaNs:
df.loc[:,df.notnull().all()]
Drop rows with any NaNs:
df.dropna(how='any')
Filtering a column based on another:
df.eggs[df.salt>55]
Modifying a column based on another:
df.eggs[df.salt>55]+=5
pandas.Series.all : Return True if all elements are True
pandas.DataFrame.any : Return True if one (or more) elements are True
pandas.DataFrame.all: Returns True if all elements within a series or along a Dataframe axis are non-zero, not-empty or not-False.
通过groupby进行重采样:
如你打算根据月份或星期几进行分组,只需要传入一个能够访问时间序列的索引上的这些字段的函数即可。
rng=pd.date_range(start='20190526',periods=100,freq='D')
ts=pd.Series(np.arange(100),index=rng)
ts.groupby(lambda x:'2019年'+str(x.month)+'月').count()
out:
2019年5月 6
2019年6月 30
2019年7月 31
2019年8月 31
2019年9月 2
dtype: int64
pandas会在算术运算过程中自动将数据对齐,并在sum这样的函数中排除缺失数据。
根据具体时间生成新的一列“年月日”:
df1=df[['Root Id','案件时间','CTM业绩']].drop_duplicates().set_index('案件时间')
df1['成交月份']=[str(x)+'年'+str(y)+'月' for x,y in zip(df1.index.year,df1.index.month)]
调整subplot周围的间距:
默认情况下,matplotlib会在subplot外围留下一定的边距,并在subplot之间留下一定的间距。间距跟图像的高度和宽度有关。因此,如果你调整了图像大小(不管
是编程还是手工),间距也会自动调整。利用Figure的subplots_adjust方法可以轻而易举地修改间距。
plt.subplots_adjust(left=None,bottom=None,right=None,top=None,wspace=None,hspace=None)
wspace和hspace用于控制宽度和高度的百分比,可以用作subplot之间的间距。如把间距收缩到0:plt.subplots_adjust(wspace=0,hspace=0)
ax.plot(x,y,'g--') 等同于 ax.plot(x,y,linestyle='--',color='g')
plt.lengend(loc='upper left')添加图例;
plt.xlim([0,10])会将X轴的范围设置为0到10;
plt.xticks()设置横轴刻度和标签;
plt.yticks()设置Y轴刻度和标签;
plt.title()设置图表标题名称;
plt.text()将文本绘制在图表的指定坐标(x,y),还可以加上一些自定义格式;添加数据标签时可以用该方法。
plt.savefig('f:/哈哈/',format='png',dpi=400,bbox_inches='tight')保存一张带有最小白边且分辨率为400dpi的PNG图片。
Series.plot方法的参数:
label-用于图例的标签;
ax-要在其上进行绘制的matplotlib subplot对象。如果没有设置,则使用当前matplotlib subplot.
style-将要传给matplotlib的风格字符串(如'ko--')
alpha-图表的填充不透明度(0到1之间)
kind-可以是'line','bar','barh','kde'
logy-在Y轴上使用对数标尺。
use_inex-将对象的索引用作刻度标签。
rot-放置刻度标签(0到360)。
xticks-用作X轴刻度的值。
yticks-用作Y轴刻度的值。
xlim-X轴的界限(例如[0,10])。
ylim-y轴的界限。
grid-显示轴网格线(默认打开)。
专用于DataFrame的plot的参数:
subplots-将各个DataFrame列绘制到单独的subplot中。
sharex-是否共用同一个X轴,包括刻度的界限。
sharey-是否共用同一个y轴。
figsize-表示图像大小的元组。
title-表示图像标题的字符串。
legend-添加一个subplot图例(默认为True)。
sort_columns-以字母表顺序绘制各列,默认使用当前列顺序。
map函数:
map(func, *iterables)
假设有一个列表a=[1,2,3],要给列表中的每个元素都加2得到一个新列表,利用前面已经谈及过的“列表解析”,我们可以这样写:
b=[i+2 for i in a]
而利用map函数我们可以这样写:
b=map(lambda x: x+2,a)
b=list(b) #结果是[3,4,5]
(注:在python 3.x中,map函数仅仅是创建一个待运行的命令容器,只有其它函数调用它的时候才返回结果。)
也就是说,我们首先定义一个函数,然后再用map()命令将函数逐一应用到(map)列表中的每个元素,最后返回一个数组。map()命令也接受多参数的函数,如map
(lambda x,y: x*y,a,b)表示将a,b两个列表的元素对应相乘,把结果返回给新列表。
也许有的读者会疑问,有了列表解析,为什么还要有map()命令呢?其它列表解析虽然代码简短,但是本质上还是for命令,而python的for命令效率并不高,而map()
函数实现了相同的功能,并且效率更高,原则上来说,它的循环命令速度相当于C语言。
reduce函数:
它有点像map()函数,但map()函数用于逐一遍历,而reduce()函数用于递归计算。
先给出一个例子,这个例子可以算出n的阶乘:reduce(lambda x,y: x*y,range(1,n+1))
(注:在2.x中,上述命令可以直接运行,在3.x中,reduce函数已经被移出了全局命名空间,它被置于fuctools库中,如需使用,则要通过from fuctools import
reduce引入reduce).
其中,range(1,n+1)相当于给出了一个列表,元素是1~n这n个整数。lambda x,y: x*y构造了一个二元函数,返回两个参数的乘积。reduce命令首先将列表的前两个
元素作为函数的参数进行运算,然后将运算结果与第三个数字作为函数的参数,然后再将运算结果与第四个数字作为函数的参数……依此递推,直到列表结束,返回
最终结果。
如果用循环命令,那就要写成:
s=1
for i in range(1,n+1):
s=s*i
filter()函数:
顾名思义,它是一个过滤器,用来筛选列表中符合条件的元素。
例如,
b=filter(lambda x: x>5 and x<8,range(10))
b=list(b)
#结果是[6,7]
filter()函数首先需要一个返回值为bool型的函数,然后将这个函数作用到range(10)的每个元素中,如果为True,则“挑出”那个元素,最后将满足条件的所有元
素组成一个列表返回。
等同于列表生成式:
b=[i for i in range(10) if i>5 and i<8]
导入库的方法,除了使用‘import 库名’之外,还可以为库起一个别名:
import math as m
如果不需要导入库中的所有函数,可以特别指定导入函数的名字:
from math import exp as e #只导入math库中的exp函数,并起别名e;
直接导入库中的所有函数:
from math import * #尽量不要这样做,如果大量地这样引入第三方库,容易引起命名冲突。
python 2.x与3.x之间的差别不仅仅在内核上,也表现在代码的实现中。比如,在2.x中,print是作为一个语句出现的,用法为print a;但是在3.x中,它是作为函数
出现的,用法为print(a)。
使用matplotlib绘图前手动指定默认字体为中文字体(如黑体):
由于matplotlib的默认字体是英文字体,因此中文标签无法正常显示,解决办法是在作图前手动指定默认字体为中文字体。
plt.rcPararms['font.sans-serif']=['SimHei']
解决保存图像时负号'-'显示为方块的问题:
保存作图图像时,负号有可能显示不正常,可以通过以下代码解决:
plt.rcParams['axes.unicode_minus']=False
数据质量分析的主要任务是检查原始数据中是否存在脏数据,脏数据一般是指不符合要求、以及不能直接进行相应分析的数据。在常见的数据挖掘工作中,脏数据包括如下内容:
缺失值。
异常值。
不一致的值。
重复数据及含有特殊符号(如#、*)的数据。
缺失值的分析:
使用简单的统计分析,可以得到含有缺失值的属性的个数,以及每个属性的未缺失数、缺失数与缺失率等。
缺失值的处理:
总体上来说,处理方式分为3种情况:删除存在缺失值的记录、对可能值进行插补、不处理。
通过dict()函数转换,或通过dict.fromkeys来创建字典,如下:
dict([['today',20],['tomorrow',30]]),相当于{'today':20,'tomorrow':30}
dict.fromkeys(['today','tomorrow'],20),相当于{'today':20,'tomorrow':30}